Leetcode 61. Rotate List
Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4 Output:
2->0->1->NULL
Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right:
0->1->2->NULL
rotate 4 steps to the right:
2->0->1->NULL
想法是直接寻找截断的位置,然后截断更换ListNode.next,代码如下:
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if(head == None or k == 0):
return head
cur = head
n = 0 #get the length of list
while(cur):
n += 1
cur = cur.next
k = k % n
if(k == 0):
return head
secPoint = n-k
Alist = ListNode(0)
parent = None
cur = head
while(secPoint > 0):
secPoint -= 1
parent = cur
cur = cur.next
Alist.next = cur
while(cur.next!=None):
cur = cur.next
cur.next = head
parent.next = None
return Alist.next
时间复杂度是O(n), beat 30%+ 有点低。