题目描述
给你一个链表的头节点 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]
提示
- 链表中节点的数目在范围 [0, 500] 内
- -100 <= Node.val <= 100
- 0 <= k <= 2 * 1 0 9 10^9 109
思路
由于k的值可能很大,所以要先将k除len取余。
本题的实质是找到倒数第k个结点,将其后面所有结点调到链表前面。
找到倒数第k个结点:定义两个结点,让其相隔k个结点,后一起往后移动。
代码
class Solution:
def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
l = 0
cur = head
while cur is not None:
l+=1
cur = cur.next
k = k%l
bef = head
aft = head
for i in range(k):
aft = aft.next
while(aft.next is not None):
aft = aft.next
bef = bef.next
# print(bef.val, aft.val)
aft.next = head
res = bef.next
bef.next = None
return res