• 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
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    简谈单线程多线程的理解
    简谈vuex的理解
    简谈自己对redux的理解
    react-native-1
    react中信息传递的几种方式
    简谈对虚拟Dom的理解
    React-小总结
    移动端解决边框1像素问题
    JavaScript标记上的defer与async的作用与区别
    jQuery.smoove — jQuery和CSS3炫酷滚动页面内容元素动画特效插件
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12237689.html
Copyright © 2020-2023  润新知