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