python代码找到链表的倒数第K个节点并打印

在计算机科学中,链表是数据元素的线性集合,其顺序不是由它们在内存中的物理位置决定的。相反,每个元素指向下一个元素。它是一种数据结构,由一组节点组成,这些节点共同表示一个序列。在其最基本的形式中,每个节点包含:数据和到序列中下一个节点的引用(换句话说,一个链接)。这种结构允许在迭代过程中从序列的任何位置有效地插入或删除元素。更复杂的变体添加了额外的链接,允许在任意位置更有效地插入或删除节点。链表的一个缺点是访问时间是线性的(并且很难流水线化)。更快的访问,如随机访问,是不可行的。与链表相比,数组具有更好的缓存局部性。

题目:给定一个链表的头节点,输出链表倒数第k个节点的值

分析:最简单的思路就按顺序访问链表节点,得到链表的长度x之后,再次从头节点出发,访问到第x-k+1个节点时,就是链表倒数第k个节点,但是这样的方法对前x-k+1个节点重复访问了两遍,效率较低。在解答链表相关题目时,设置两个甚至三个指针常用的方法,在这个题目中,可以设置两个指针,一个为a,一个为b,a先出发,在a访问了k-1个节点时,b从头节点出发,然后两个指针同时向后访问,当a访问到最后一个节点时,b访问到的就是倒数第k个节点,代码如下。

'''
输入一个链表,输出该链表中倒数第k个结点。
''''''
这道题的思路很好
如果在只希望一次遍历的情况下, 寻找倒数第k个结点, 可以设置两个指针
第一个指针先往前走k-1步, 然后从第k步开始第二个指针指向头结点
然后两个指针一起遍历
当地一个指针指向尾节点的时候, 第二个指针正好指向倒数第k个结点
推广: 寻找中间节点, 两个指针一起, 第一个指针每次走两步, 第二个指针每次走一步,  快指针指到尾部, 慢指针正好指到中间
'''# -*- coding:utf-8 -*-
class ListNode:def __init__(self, x):self.val = xself.next = Noneclass Solution:def FindKthToTail(self, head, k):if head == None or k <= 0:return NonepAHead = headpBehind = Nonefor i in range(k-1):if pAHead.next != None:pAHead = pAHead.nextelse:return NonepBehind = headwhile pAHead.next != None:pAHead = pAHead.nextpBehind = pBehind.nextreturn pBehindnode1 = ListNode(10)
node2 = ListNode(11)
node3 = ListNode(13)
node1.next = node2
node2.next = node3S = Solution()
print(S.FindKthToTail(node1, 1).val)

Suppose we have a singly linked list, we have to check find the value of the kth last node (0-indexed). We have to solve this in single pass.

So, if the input is like node = [5,4,6,3,4,7], k = 2, then the output will be 3, as The second last (index 3) node has the value of 3.

To solve this, we will follow these steps −

  • klast := node

  • last := node

  • for i in range 0 to k, do

    • last := next of last

  • while next of last is not null, do

    • last := next of last

    • klast := next of klast

  • return value of klast

Let us see the following implementation to get better understanding −

Example

class ListNode:def __init__(self, data, next = None):self.val = dataself.next = nextdef make_list(elements):head = ListNode(elements[0])for element in elements[1:]:ptr = headwhile ptr.next:ptr = ptr.nextptr.next = ListNode(element)return headclass Solution:def solve(self, node, k):klast = nodelast = nodefor i in range(k):last = last.nextwhile last.next:last = last.nextklast = klast.nextreturn klast.valob = Solution()
l1 = make_list([5,4,6,3,4,7])
print(ob.solve(l1, 2))

Input

[5,4,6,3,4,7], 2

Output

3

参考:找到链表的倒数第k个节点 python

参考:python 链表倒数第k个节点_leetcode链表之找出倒数第k个节点

参考:Program to find the K-th last node of a linked list in Python

参考:Find the kth-to-last element of a singly linked list

参考:linked list

python代码找到链表的倒数第K个节点并打印相关推荐

  1. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

  2. python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点

    题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...

  3. python 链表中倒数第k个节点

    | 返回链表中倒数第K个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值 ...

  4. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  5. 【剑指offer - C++/Java】14、链表中倒数第k的节点

    在线题目链接:链表中倒数第k的节点 文章目录 1 题目描述 2 题目分析 2.1 Java代码 2.2 C++代码 3 总结 1 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2 题目分析 这 ...

  6. 链表中倒数第 k 个节点

    链表中倒数第 k 个节点 1.参考资料 https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 2 ...

  7. [数据结构]题海啊,全是水(三)链表中倒数第k个节点、链表的回文结构、链表分割

    这是一个目录 链表中倒数第k个节点 解法一 解法二 链表的回文结构 思路 代码 链表分割 思路 代码 最后 菜鸡大学生的数据结构--刷题篇3 我们的第三题小宝贝儿回归了! 菜鸡大学生明白,笔试oj题目 ...

  8. 求单项链表的倒数第k个节点(c语言)

    求单项链表的倒数第k个节点(只遍历一次) 单向链表求倒数第k个节点我们可以先遍历一遍找出链表的长度,再设置一个指针走(n-k)步可以找到倒数第k个节点. 但是,这需要遍历两次,如果只允许遍历一次我们就 ...

  9. 剑指offer:面试题22. 链表中倒数第k个节点

    题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...

最新文章

  1. Linux应用层的定时器Timer使用详解【转】
  2. 总统先生,一路走好!
  3. Java NIO学习系列一:Buffer
  4. Fedora 与 Ubuntu 深度比较
  5. 在微信浏览器字体被调大导致页面错乱的解决办法
  6. 《Python Cookbook 3rd》笔记(1.10):删除序列相同元素并保持顺序
  7. ThreadLocal与Synchronized的用法
  8. 狼道:强者的成人礼(第2版)
  9. c语言实验一的错误,C语言实验(三)
  10. docker -v 挂载文件_浅谈关于docker中数据卷的操作,附带案例
  11. js文件中使用jstl或者其他标签
  12. Dell PowerEdge R740xd可以做什么?
  13. 1005 C语言控制输入1001-1004
  14. IE9相比IE8丢失了什么?
  15. Java计算机毕业设计德云社票务系统源码+系统+数据库+lw文档
  16. DX9b 与 DX9c 在x文件解析方面带来的麻烦
  17. JAVA随机抽取一名幸运观众(手动输入观众)小实例
  18. 植物大战僵尸音乐计算机简谱,植物大战僵尸主题曲简谱|植物大战僵尸主题曲:Zombies on Your Lawn...
  19. [毒]QQ空间出现的伪装QQ登录窗口诈骗
  20. 一台电脑网线连接另一台电脑,通过另一台电脑wifi网络上网

热门文章

  1. Winform程序只允许应用单开
  2. OpenCV 4.5.3 发布!优化DNN等多个模块~
  3. SLAM++: SLAM at the Level of Objects
  4. python 乱序数组,list等有序结构的方法
  5. 哪个术语描述了服务器软件在专用计算机,计算机网络基础
  6. empty怎么发音_empty,怎么读,解答要读出来,empty怎么读慢一点,清楚一点!
  7. tcp报文格式_面试必备TCP(一):三次握手
  8. mac txt 换行符_推荐两款免费的网页代码编辑器(Win和Mac系统)
  9. 生信服务器入门级基本设置
  10. 关于Github(1)