又是链表的题目,本题要求将所有nodes 向右移动K位
我初步的想法是把其所有val添加到 容器中 ,like List , 然后再List里操作完了再放入链表,让我先去看看答案。
答案: 先将链表变成环状,然后再从移动好之后的位置打开。
OK,我写完了,中间有几个细节需要注意
class Solution:
def rotateRight(self, head: ListNode, k: int) -> ListNode:
if not head or k == 0:
return head
p = head
length = 1
while p.next:
length += 1
p = p.next
print(length)
p.next = head
q = head
k = k % length
for _ in range(length - k - 1):
q = q.next
res = q.next
q.next = None
return res
1. 把环连起来,顺便可以返回环的长度,这一步很简单
2.把环切开,这里需要我们找到从哪里切开,例如
[1,2,3,4,5,6] K = 2 ---------> [5,6,1,2,3,4]
如果我们只向右移动两位(k=2),那会在3处切开 得到 [3,4,5,6,1,2]
所以正确的应该平移 len - k 位
3. 如果k大于len ,则 k = k % len
我再去看看答案,看看有没有一步到位的方法。
牛逼,答案跟我一模一样 KOOOO