思路:双指针
时间复杂度:O(n),遍历
时间复杂度:O(1),常数变量
这里的关键是确定新的头结点的位置:
当k<=length: new_head = length-k-1
当k>length: k = k%length => new_head = length-k%length-1
class Solution:
def rotateRight(self, head: ListNode, k: int) -> ListNode:
if head==None or head.next==None:return head # 空节点和单节点直接返回
# 先改为循环单链表, 然后找出头尾节点,修改尾节点就OK
# 寻找原来的尾节点
old_tail=head
length = 1
while old_tail.next:
length+=1
old_tail=old_tail.next
old_tail.next=head
# 寻找新的头结点
new_tail = head
for i in range(length-k%length-1):
new_tail=new_tail.next
new_head=new_tail.next
new_tail.next = None
return new_head