目录
题目:
思路:
- 求链表长度;
- 找出倒数第 k+1 个节点;
3.链表重整:将链表的倒数第 k+1 个节点和倒数第 k个节点断开,并把后半部分拼接到链表的头部。
代码:
class Solution:
def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
if not head or not head.next:
return head
#求链表长度
len=0
cur=head
while cur:
len+=1
cur=cur.next
#取模
k%=len
if k==0:
return head
fast,slow=head,head
#让fast和head保持k距离
while k:
fast=fast.next
k-=1
#fast向右移动到空时,slow指向倒数第k+1个节点
while fast.next:
fast=fast.next
slow=slow.next
#新头节点应该是倒数第k个节点
new_head=slow.next
#倒数第k+1个节点和k节点断开
slow.next=None
#最后一个节点和原始头节点连接
fast.next=head
return new_head