61. 旋转链表

又是链表的题目,本题要求将所有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
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/ChevisZhang/p/12237689.html