题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个链表,现在要进行 k 次轮换操作,每次轮换会把最后一个结点放到第一个,求最终链表。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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]:
dummy = ListNode(0, head)
left, right = dummy, dummy

cur = head
l = 0
while cur:
cur = cur.next
l += 1
# if not cur.next:
# cur.next = head

if l == 0:
return head

k %= l
if k == 0:
return head

for _ in range(k):
if right.next:
right = right.next
else:
right = dummy

while right.next:
left, right = left.next, right.next

dummy.next = left.next
left.next = right.next
right.next = head

return dummy.next