博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指Offer》JZ14:输出链表中倒数第k个结点
阅读量:4091 次
发布时间:2019-05-25

本文共 1650 字,大约阅读时间需要 5 分钟。

本系列文章为《剑指Offer》刷题笔记。

刷题平台:

在这里插入图片描述
思路1
自然而然想到使用容器(列表、堆栈、数组等)保存链表,然后直接查询

# -*- coding:utf-8 -*-# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    def FindKthToTail(self, head, k):        # write code here        if not head or k<1:            return None            # 使用列表保存链表结构        stack = []        cur = head        while cur:            stack.append(cur)            cur = cur.next            # 非法情况,即K大于链表长度        if k > len(stack):            return None            return stack[-k]

思路2 (更快)

使用两个指针,同时都指向头结点,首先第一个指针走k-1步,即第一个结点到达第k个结点;然后两个指针同时往后移动,直到第一个指针到达链表末尾时停止,这时候第二个指针的指向是倒数第k个结点,最后返回第二个指针指向的节点
在这里插入图片描述

# -*- coding:utf-8 -*-# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    def FindKthToTail(self, head, k):        # write code here        if not head or k<1:            return None        p1 = head        p2 = head        # 首先将p1移动k-1步,到达第k个节点        for _ in range(k-1):            p1 = p1.next            if p1 == None:    # 判断k的值是否大于链表长度,如果大于的话,p1会指向None                return None        # 当p1走到链表最后一个节点的时候,p2位于倒数第k个位置        while p1.next:            p1 = p1.next            p2 = p2.next        return p2

正常的思考过程:

(1)找到链表结尾,往回查找k个节点。写程序时逆向查找可能不好理解。
(2)用一个指针先走,另一个指针跟前一个指针保持k-1的差距,当第一个指针到达链尾,第二个指针就停在倒数第k个

参考

https://blog.csdn.net/qq_18254385/article/details/94454415?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai

.
https://cuijiahua.com/blog/2017/12/basis_14.html

你可能感兴趣的文章
剑指_复杂链表的复制
查看>>
FTP 常见问题
查看>>
shell 快捷键
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
No devices detected. Fatal server error: no screens found
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
swift中单例的创建及销毁
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
移植Vim配色方案到Eclipse
查看>>
谈谈加密和混淆吧[转]
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
SpringCloud学习之PassCloud——(一)PassCloud源代码下载
查看>>
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
phpquery抓取网站内容简单介绍
查看>>