给你一个链表的头节点
head
,旋转链表,将链表每个节点向右移动k
个位置。
图解:
上代码
class Solution {
public ListNode rotateRight(ListNode head, int k) {
//不旋转,无结点,只有一个结点
if (k == 0 || head == null || head.next == null) {
return head;
}
//结点数
int n = 1;
ListNode fast= head;
//统计结点数并找尾
while (fast.next != null) {
fast= fast.next;
n++;
}
//从头走到倒数第k+1个结点
int add = n - k % n;
if (add == n) {
return head;
}
//首尾相连,闭环
fast.next = head;
ListNode slow = head;
//找倒数k+1个结点
while (add-- > 0) {
slow = slow .next;
}
//拆环
ListNode newHead= slow .next;
slow.next = null;
return newHead;
}
}
最难不过坚持!