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考虑?请鹿过高手拍砖并指点.
页:
[1]