欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > LeetCode 第61题:旋转链表

LeetCode 第61题:旋转链表

2025/11/8 22:49:04 来源:https://blog.csdn.net/Lukegood/article/details/148062285  浏览:    关键词:LeetCode 第61题:旋转链表

题目描述:

给你一个链表的头节点head,旋转链表,将链表每个节点向右移动k个位置。

示例1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

输入:head = [0,1,2], k = 4
输出:[2,0,1]

提示:

  • 链表中节点的数目在范围 [0, 500] 内
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 100000000000

解题思路:

方法一:闭合为环

  • 首先将给定的链表连接成环
  • 给定链表的长度为n,注意到当向右移动的次数k>=n时,仅需要向右移动k mod n次即可。
  • 新链表的最后一个节点为原链表的第(n-1)-(k mod n)个节点(从0开始计数)。 
  • 将当前闭合为环的链表断开,即可得到所需的结果。
  • 当链表长度不大于1或者k为n的倍数时,新链表将与原链表相同,无需处理
struct ListNode* rotateRight(struct ListNode* head,int k)
{if(k==0 || head==NULL || head->next ==NULL)  return head;//移动0或链表头节点为空或只存在一个节点,则直接返回头节点int n=1;struct ListNode* iter = head;//统计链表中节点的数量while(iter->next!=NULL){iter = iter->next;n++;}// iter 是尾节点//如果移动次数和链表节点数量相等,则直接返回,不需处理int add = n-k%n;if(add == n)   return head;iter->next = head;//尾节点的 next 指向头节点,形成环while(add--)  iter = iter->next;//找到新链表的尾节点struct ListNode* ret = iter->next;//新链表的尾节点的下一个定义定义为新的头节点iter->next = NULL;//将新链表的尾节点和头节点的连接断开,尾节点指向NULLreturn ret;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词