标签:leetcode
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
.
分析:注意k有可能会大于list的长度,所以先求出list长度 len, 然后 k = k % len,
举个例子, 1 -> 2 -> 3, k = 1, 则翻转后 得到 3 -> 1 -> 2, 新的head是原list中 第 len - k 个 node的 next node,所以找到 (len - k)th node
这里还是运用了dummy node,这样找长度也好找第几个node也好,循环结束之后当前node不为null,可以直接令 node.next = xxx来做操作
私以为这种做法比Code Ganker大牛的解法清晰一些。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode rotateRight(ListNode head, int k) { if(head == null || head.next == null) return head; int len = 0; ListNode dummy = new ListNode(0); dummy.next = head; ListNode fast = dummy; while(fast.next != null){ len++; fast = fast.next; } k = k % len; if(k == 0) return head; // find the len - k th node, the next node of it will be the new head; ListNode slow = dummy; int i = 0; while(i < len - k && slow.next != null){ slow = slow.next; i++; } ListNode newHead = slow.next; fast.next = head; slow.next = null; return newHead; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:leetcode
原文地址:http://blog.csdn.net/chibaoneliuliuni/article/details/47162425