zoukankan      html  css  js  c++  java
  • 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
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    SpringIOC框架简单实现(注解实现)
    Spring前瞻----Java反射机制
    SpringMVC_前置知识
    SpringAOP_构造注入实现
    SpringAOP_设置注入实现
    SpringIOC-设置注入实现
    IDEA一些常用快捷键
    第一章计算机网络概述
    第二大章--数据链路层思维导图
    第一大章--1.2标准化工作
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12237689.html
Copyright © 2011-2022 走看看