zoukankan      html  css  js  c++  java
  • LeetCode-剑指offer22:链表中倒数第k个节点

    题目描述:

    输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

    例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

    示例:

    给定一个链表: 1->2->3->4->5, 和 k = 2.

    返回链表 4->5.

    解决方案:[ 可行,但是提交超时 ]

    我的第一个想法就是先翻转链表,把链表1->2->3->4->5变成5->4->3->2->1,然后遍历到k,得到5->4,然后再将5->4翻转成4->5,得出结果,但是很遗憾,提交结果是时间超时。所以这个方案舍弃。

    伪代码如下:

     func getKthFromEnd(_ head: ListNode?, _ k: Int) -> ListNode? {
            let head = reverse()
            while k > 0 {
                head = head.next
                k -= 1
            }
            return reverse()
        }

    然后看了下别人的方案,发现一个非常巧妙的解法。

    双指针法,定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1步,第二个指针保持不动,从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个指针到达链表的尾结点时,第二个指针正好指向倒数第K个节点

    代码如下:

      func getKthFromEnd(_ head: ListNode?, _ k: Int) -> ListNode? {
            if head == nil || k == 0 { return nil }
            var count = k
            var first = head
            var second = head
            
            while count > 1 {
                //这里判断下 如果first.next 为空,说明,链表的长度不足k
                guard let node = first?.next else { return nil }
                first = node
                count -= 1
            }
            
            while first?.next != nil {
                second = second?.next
                first = first?.next
            }
            return second
        }
    }

    今天分享的内容短小精悍,是不是很简单,但是很巧妙。自己想,可能一会儿很难想到,所以平时多刷刷就行了。

    欢迎关注【无量测试之道】公众号,回复【领取资源】
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、
    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


    添加关注,让我们一起共同成长!

  • 相关阅读:
    This project references NuGet package(s) that are missing on this computer
    Industry Engineer
    winform
    OPC
    groupbox 下的datagridview的列标题字体修改混乱
    vs远程调试
    nuget pack 时不包含依赖包(而不是引用项目的dll,区别于IncludeReferencedProjects)
    Inno Setup入门(二十二)——Inno Setup类参考(8)
    学习GitHub
    python3.4读取excel数据绘图
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15157487.html
Copyright © 2011-2022 走看看