LeetCode 61.Rotate List (Medium)

Posted by Jfson on 2019-01-02

LeetCode 61.Rotate List (Medium)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Given a linked list , rotate the list to the right by k places , where k is non-negative
Example 1:
Input: 1 -> 2 -> 3 -> 4 -> 5 -> NULL, k = 2
Output: 4 -> 5 -> 1 -> 2 -> 3 -> NULL
Explanation:
Rotate 1 steps tp right: 5 -> 1 -> 2 -> 3 -> 4 -> NULL
Rotate 2 steps tp right: 4 -> 5 -> 1 -> 2 -> 3 -> NULL
Example 2:
Input: 0 -> 1 -> 2-> NULL ,k = 4
Output: 2-> 0 -> 1 -> NULL
Rotate 1 steps tp right: 2 -> 0 -> 1 -> NULL
Rotate 2 steps tp right: 1 -> 2 -> 0 -> NULL
Rotate 3 steps tp right: 0 -> 1 -> 2 -> NULL
Rotate 4 steps tp right: 2 -> 0 -> 1 -> NULL
  • Solution : image

    image

    • Fast index , slow index
    • Swap : image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 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;
ListNode res = new ListNode(0);
res.next = head;
ListNode fast = res;
ListNode slower = res;
int i;
for ( i = 0; fast.next !=null; i++) {
fast = fast.next;
}
for (int j = i - k%i; j >0; j--) {
slower = slower.next;
}
// swap
fast.next = res.next;
res.next = slower.next;
slower.next = null;
return res.next;
}
}

pv UV: