目录
题目
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:

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

输入:head = [0,1,2], k = 4
输出:[2,0,1]
提示:
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 * 109
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
思路
1.首先遍历原始链表求出链表长度
2.判断如果k是链表长度的整数倍,循环右移相当于没移,返回头节点。
3.把单向链表变成环形链表(尾节点指向头节点) ,后序遍历判断条件断开
4.断开链表尾节点指向此时为null
5.返回链表此时表头节点
完整代码
public ListNode rotateRight(ListNode head, int k) {
//链表长度为0直接返回
if(head==null){return head;}
ListNode temp1=head;
//遍历 得到链表 长度
int len=1;
while(temp1.next!=null){
temp1=temp1.next;
++len;
}
//如果k是len的整数倍,循环右移相当于没移
int mod=k%len;
if(mod==0){return head;}
//把单向链表变成环形链表 ,后序遍历判断条件断开
temp1.next=head;
ListNode newHead=new ListNode();
ListNode temp2=head;
int count=0;
while(temp2!=null){
count++;
if(count==(len-mod)){//断开链表尾节点此时为null
newHead=temp2.next;
temp2.next=null;
break;
}
temp2=temp2.next;
}
return newHead;
}
力扣风采

本文探讨如何在LeetCode题目中解决旋转链表问题,通过遍历链表长度,将链表转化为环形并找到正确断点,实现链表节点右移k位的操作。
205

被折叠的 条评论
为什么被折叠?



