Leetcode: Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative.



For example:

Given 1->2->3->4->5->NULL and k = 2,

return 4->5->1->2->3->NULL.

Anaylisis: Linked List题目的做法其实比较固定,就是Runner Technique(Two pointer) 方法加上 Dummy Node(设置一个head之前的虚假节点)两种方法,这道题就这样搞一搞就出来了。

需要注意的是:处理null 输入需要特别考虑,然后,需要找到新的linked list的头

第二遍做法:注意15行需要特别处理,wrap up了之后n=0的情况

 1 public class Solution {

 2     public ListNode rotateRight(ListNode head, int n) {

 3         if (head == null) return null;

 4         ListNode dummy = new ListNode(-1);

 5         dummy.next = head;

 6         ListNode cursor = dummy;

 7         ListNode walker = dummy;

 8         ListNode runner = dummy;

 9         int count = 0;

10         while (cursor.next != null) {

11             cursor = cursor.next;

12             count ++;

13         }

14         n %= count;

15         if (n == 0) return head;

16         while (n > 0) {

17             runner = runner.next;

18             n--;

19         }

20         while (runner.next != null) {

21             runner = runner.next;

22             walker = walker.next;

23         }

24         dummy.next = walker.next;

25         walker.next = runner.next;

26         runner.next = head;

27         return dummy.next;

28     }

29 }

 

 

你可能感兴趣的:(LeetCode)