版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010870545/article/details/82787824
我的版本:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
node = head
cnt = 0
# 计算链表长度
while node:
cnt += 1
node = node.next
# 保持原地不动:无需移动的情况
if cnt <= 1 or k%cnt ==0:
return head
k %= cnt
j = cnt - k
dummy = ListNode(0)
cur = dummy
node = head
while j > 0:
cur.next = ListNode(node.val)
cur = cur.next
node = node.next
j -= 1
res = node
while node.next:
node = node.next
node.next = dummy.next
return res
大神版本:
def rotateRight(self, head, k):
if k == 0 or head is None:
return head
dummy=ListNode(0)
dummy.next=head
p=dummy
length=0
while p.next: # 得到list的长度
length+=1
p=p.next
p.next=dummy.next # 指针指向head
step=length-(k%length) # 得到新head的位置
while step>0: # 到新head的位置
step-=1
p=p.next
dummy.next=p.next # 变化
p.next=None #
return dummy.next