61. 旋转链表
题目来源:
LeetCode题目:61. 旋转链表 - 力扣(LeetCode)
解题思路:
将链表的每个位置往后移动 k 位即将链表的最后 k 个元素移至开头。
解题代码:
#python3
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:def getLength(head:Optional[ListNode])->int:res=0while head!=None:head=head.nextres=res+1return resdef rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:length=Solution.getLength(head)if length==0:return headk=k%lengthif k==0:return headnewHead=headnewTail=headfor i in range(k-1):newTail=newTail.nextpre=newHeadwhile newTail.next!=None:pre=newHeadnewHead=newHead.nextnewTail=newTail.nextpre.next=NonenewTail.next=headreturn newHead
总结:
官方题解是将链表闭合为环后让 head 移动 k 个位置,再在该位置的前面一个 节点断开链表。