61. Rotate List
/** * 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) { ListNode dummy = new ListNode(-1); dummy.next = head; // get the length of the linked list int length = 1; while( head != null && head.next != null ){ head = head.next; length++; } k = k % length; // move the fast and slow pointers to the desired position ListNode slow = dummy; ListNode fast = dummy; while( k > 0){ fast = fast.next; k--; } while( fast != null && fast.next != null ){ fast = fast.next; slow = slow.next; } fast.next = dummy.next; dummy.next = slow.next; slow.next = null; return dummy.next; } }
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 to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4 Output:2->0->1->NULLExplanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right:0->1->2->NULLrotate 4 steps to the right:2->0->1->NULL
posted on 2018-07-18 09:19 猪猪🐷 阅读(72) 评论(0) 收藏 举报
浙公网安备 33010602011771号