Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given
return
Given
1->2->3->4->5->NULL
and k = 2
,return
4->5->1->2->3->NULL
.
k的值可以大于链表长度, 大于的话用k对length取莫. 用快慢指针方法 快指针先走k步 然后一起走.
最后快指针停在最后面的位置 (null之前),慢指针停在要翻转的前一个位置.
记录slow.next就是newhead结点, fast,next 指向原来的head, slow.next指向null
public class Solution { public ListNode rotateRight(ListNode head, int k) { if (k == 0 || head == null) { return head; } ListNode dummy = new ListNode(0); dummy.next = head; ListNode fast = head; ListNode slow = head; ListNode cur = head; int len = 0; while (cur != null) { cur = cur.next; len++; } k = k%len; for (int i = 0; i < k; i++) { fast = fast.next; } while (fast.next != null) { fast = fast.next; slow = slow.next; } fast.next = head; dummy.next = slow.next; slow.next = null; return dummy.next; } }
没有评论:
发表评论