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->NULLExample 2:
Input: 0->1->2->NULL, k = 4 Output:2->0->1->NULLExplanation: 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->NULLrotate 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%+ 有点低。

本文详细解析了LeetCode第61题“旋转链表”的解决方案,通过寻找截断位置并调整ListNode.next属性实现链表右旋k位。代码采用Python实现,时间复杂度为O(n)。
436

被折叠的 条评论
为什么被折叠?



