61. Rotate List
https://leetcode.com/problems/rotate-list/
观察到:倒数第k%length个节点就是新头节点,新头节点的前一个点就是新尾节点
corner case:当k % length = 0的时候,rotate之后还是和原链表一样,故无需变换
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode rotateRight(ListNode head, int k) { 11 if(head == null || k == 0){ 12 return head; 13 } 14 int length = 1; 15 ListNode tail = head; 16 while(tail.next != null){ 17 length += 1; 18 tail = tail.next; 19 } 20 if(k % length == 0){ 21 return head; 22 } 23 int newHeadIndex = length - k % length; 24 25 ListNode newTail = head; 26 ListNode newHead = head.next; 27 while(newHeadIndex != 1){ 28 newTail = newTail.next; 29 newHead = newHead.next; 30 newHeadIndex -= 1; 31 } 32 tail.next = head; 33 newTail.next = null; 34 return newHead; 35 } 36 }