给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例 2:
输入:head = [0,1,2], k = 4
输出:[2,0,1]
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
if not head:
return head
length = 1
temp1 = head
#历遍计算链表长度 并记录结尾
while(temp1.next):
temp1 = temp1.next
length += 1
#计算有效移动次数
k = k % length
if k == 0:
return head
move = length - k - 1
#按照需求旋转
temp2 = head
for _ in range(move):
temp2 = temp2.next
#记录链表开头
start = temp2.next
#切断
temp2.next = None
#连接
temp1.next = head
return start