LeetCode 61. 【Java】61. Rotate List
原题链接
中等
作者:
tt2767
,
2020-02-01 23:13:22
,
所有人可见
,
阅读 534
/*
1. k 次翻转后的结果必定在倒数第 k 个数处断开, 所以找到 k-1 的 node 和 tail-node 即可
2. 注意 k > len 时取模
3. 注意写法和特判
4. testcase:
当链表为:null,1个数,2个数,和10个数时
当k为:0,1,2和 666 时
*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null) return head;
var p1 = head;
var p2 = head;
int len = 0;
for (var p = head; p != null; p = p.next ) len ++;
k = k % len;
// if (k == 0) return head;
while(k-- > 0) p2 = p2.next;
while(p2.next != null){
p1 = p1.next;
p2 = p2.next;
}
p2.next = head;
head = p1.next;
p1.next = null;
return head;
// 这样写当 p1 == p2 同为末尾节点时 res = null,所以要加k == 0 的特判
// var res = p1.next;
// p1.next = null;
// p2.next = head;
// return res;
}
}