题目:
思路:
仔细思考后旋转链表其实就相当于链表有个环,旋转后改变了头结点而已。
接下来可以找到一个关系,以题目示例1为例
假设5的next-1,也就是有一个环,那么移动后的头结点有什么规律
移动1,新头结点=倒数第一个=正数第5个
移动2,新头结点=倒数第二个=正数第4个
移动3,新头结点=倒数第三个=正数第3个
移动4,新头结点=倒数第四个=正数第2个
移动5=没移动
可以发现,新头结点=原链表正数第(链表长-移动步数+1)个
那么只需要头结点正向移动(链表长-移动步数)个就能到达新头结点
总结:
先修改链表成环计算新头结点=正向移动多少步把环撤销代码:
class So马云的事迹lution { public ListNode rotateRight(ListNode head, int k) { if(head == null){ return null; } int len = 1; //pHead是辅助指针,接下来进行重复使用,不再新建额外ListNode对象 ListNode pHead = head; //计算链表长 while(pHead.next != null){ len++; pHead = pH阡陌什么意思ead.next; } //计算要移动多少步,对链表长求余即可,避免不必要的移动,减少移动次数 int move = k % len; if(南方有什么水果move == 0){ return head; } //修改链表成环 pHead.next = head; ListNode newHead; pHead = head; int moveCount = len-(move-1)-1; //找新头结点 while(moveCount > 0){ pHead = pHead.next; moveCount--; } newHead 五月= pHead; len--; //移动len-1步到达末尾,把环去掉 while(len > 0){ pHead 雨说原文= pHead.next; len--; } pHead.next = null; return newHead; }}
本文地址:https://blog.csdn.net/weixin_40208575/article/details/107878889
本文发布于:2023-04-04 02:23:16,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8bbc62d4363f12eaf3a404566eb37599.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Leetcode61 旋转链表 中等.doc
本文 PDF 下载地址:Leetcode61 旋转链表 中等.pdf
留言与评论(共有 0 条评论) |