将链表的右边k个节点放到左端,此类问题可以使用快、慢点(差k个节点)的方式实现O(n)复杂度,但是本例存在k大于链表长度的情况,因此先便利求长度。
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if not head:
return None
node = head
lenn = 1
while node.next:
node = node.next
lenn += 1
cnt = k % lenn
fast = head
slow = head
i = 0
while i < cnt:
fast = fast.next
i += 1
if not fast:
return head
while fast.next:
fast = fast.next
slow = slow.next
fast.next = head
dummy = slow.next
slow.next = None
return dummy