Tag:List
Difficulty:Medium
Problem
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
Solution
最简单的方法。先遍历统计个数(这里注意保存最后一个节点),然后得出要旋转的是第几个,遍历链表到要旋转的前一个(保存节点,因为要指向null),修改指针指向即可。
关键:保存节点!!!
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null || k == 0) {
return head;
}
int sum = 1;
ListNode p = head;
while (p.next != null) { // p.next保存最后一个节点
sum++;
p = p.next;
}
k = sum - k%sum; // 第几个
if (k == sum) {
return head;
}
ListNode pre = head;
while (k != 1) { // 到要旋转元素前一个
pre = pre.next;
k--;
}
ListNode res = pre.next; // 旋转后的头元素
p.next = head;
pre.next = null;
return res;
}