leetcode 【Rotate List 】python 实现

题目

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.

代码:oj在线测试通过 Runtime: 200 ms

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     # @param head, a ListNode
 9     # @param k, an integer
10     # @return a ListNode
11     def rotateRight(self, head, k):
12         if k == 0 or head is None or head.next is None:
13             return head
14         
15         dummyhead = ListNode(0)
16         dummyhead.next = head
17         
18         pFirst = dummyhead
19         pSecond = dummyhead
20         
21         # get length of the linked list
22         length = 0
23         p = dummyhead
24         while p.next is not None:
25             length += 1
26             p = p.next
27         k = k % length
28         if k == 0:
29             return dummyhead.next
30 
31         for i in range(0,k):
32             pFirst = pFirst.next
33         
34         while pFirst.next is not None:
35             pFirst = pFirst.next
36             pSecond = pSecond.next
37         
38         result = pSecond.next
39         pSecond.next = None
40         pFirst.next = dummyhead.next
41         
42         return result

思路

这个题目感觉没有说清楚 如果k大于表长度应该怎么办 并不是特别严谨

首先对k值进行预处理(尤其需要考虑k大于表长度的情况)

1. 处理一个special case: 当k等于表长的时候 不用处理 直接返回Linked List (这个case之前一直没有考虑,导致一直没有通过,shit)

2. 后面的就是常规的思路。双指针,其中一个指针先移动k步;然后两个指针一起移动,第一个指针移动到最后一个元素;再然后就是把尾巴接到头上,再从第二个指针.next的位置向后断开就OK了

疑惑:小白还有一个疑惑 就是如何才能不把k=0的情况当杜作为一个case考虑?请鹿过高手拍砖并指点.

原文地址:https://www.cnblogs.com/xbf9xbf/p/4187692.html