编程题目:输入一个链表,输出该链表中倒数第k个节点
两种方法
1.在链表的初始化数据中加入 num 数据, 每添加一个节点,num加1,每删除一个节点,num减1
查找倒数第k个元素,即 指向第一个节点的指针向后移动 num - k 步。
2.使用两个指针 i 和 j, i和j初始化都指向第一个节点。
查看倒数第k个元素,先将 j 向右移动 k-1 步。
再将 i 和 j 同时向右移动,直到 j 指向最后一个元素结束。
这时候 i 指向的元素即 倒数第k个元素。返回 i 指向节点的值即可。
#!/usr/bin/env python3
# -*- coding: utf-8 -*- class Node(object):
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_ class Simple_List(object):
def __init__(self):
self.head = None
self.num = 0 def is_empty(self):
return self.head is None def prepend(self, elem):
self.head = Node(elem, self.head)
self.num += 1 def prepop(self):
if self.is_empty():
raise ValueError("List is Empty")
e = self.head.elem
self.head = self.head.next
self.num -= 1
return e def bianli(self):
p = self.head
li = []
while p:
li.append(p.elem)
p = p.next
return li def find_the_key(self, key):
n = self.num - key
p = self.head
while n:
p = p.next
n -= 1
return p.elem def find_the_key1(self,key):
i,j = self.head, self.head
while key-1:
j = j.next
key -= 1
while j.next:
i = i.next
j = j.next
return i.elem if __name__ == "__main__":
sl = Simple_List()
for i in [1,4,8,2,4,8,5]:
sl.prepend(i)
print("链表:",sl.bianli())
key = int(input("查看该链表倒数第k个值:"))
print("倒数第k个值:",sl.find_the_key(key))
print("倒数第k个值:",sl.find_the_key1(key))
之前写这个题目的时候没有注意到边界问题,当用户输入的key值不合理时,会发生错误。
所以我们要对用户输入的数据进行判断并处理。
修改的地方如下,其他地方不变
def find_the_key(self, key):
if key < 1 or key > self.num:
raise ValueError("num must in 0<key<={}".format(self.num))
n = self.num - key
p = self.head
while n:
p = p.next
n -= 1
return p.elem def find_the_key1(self,key):
if key < 1:
raise ValueError("num is unabled,please repeat input")
i,j = self.head, self.head
while key-1:
j = j.next
key -= 1
if j is None:
raise ValueError("num is unabled,please repeat input")
while j.next:
i = i.next
j = j.next
return i.elem
编程题目:输入一个链表,输出该链表中倒数第k个节点的更多相关文章
- 剑指offer-第三章高质量的代码(输出该链表中倒数第K个节点)
题目:输入一个链表,输出这个链表中倒数第K个节点.(代码的鲁棒性) 思路:用两个指针p1和p2,都指向头节点,开始的时候,p2不动,p1移动k-1次,指向第k个节点.此时,如果p1->next! ...
- 题目15 链表中倒数第K个节点
///////////////////////////////////////////////////////////////////////////////////// // 5. 题目15 链表中 ...
- 链表中倒数第k个节点(Java)
链表中倒数第k个节点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:two-pointers思想,因为是单链表,没法得prevous点,直接遍历得到链表长度再重新遍历效率很低. 采用双指 ...
- 《剑指offer》 链表中倒数第k个节点
本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...
- 剑指offer(14)链表中倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个节点. 题目分析 用两个指针来跑,两个指针中间相距k-1个节点,第一个指针先跑,跑到了第k个节点时,第二个指针则是第一个节点. 这时候两个一起跑.当第一个 ...
- php实现求链表中倒数第k个节点
php实现求链表中倒数第k个节点 一.总结 $head = $head->next; //1.将$head节点next域里面的记录的那个地址值($head节点的下一个节点的地址)给$head,$ ...
- LeetCode 面试题22. 链表中倒数第k个节点
题目链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 输入一个链表,输出该链表中倒数第 ...
- 【剑指Offer】面试题22. 链表中倒数第k个节点
题目 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...
- 力扣题解-面试题22. 链表中倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...
- 图解算法——链表中倒数第k个节点
题目来源: 剑指 Offer 22. 链表中倒数第k个节点 leetCode 题目描述: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个 ...
随机推荐
- 记处理spring-devtools 和 通用mapper 使用问题
问题: tk.mybatis.mapper.MapperException: 无法获取实体类com.*.* 对应的表名 环境: springboot 2.0.6, 通用mapper 2.0.4,还有 ...
- 五年C语言程序员,是深耕技术还是走管理?
从进入程序员行列开始(2013年6月),到现在为止(2019年2月),已经有五年半了. 一路波折,已经从无知菜鸟走到了意识觉醒的老鸟了. 薪资变化情况如下: 2013年:2000元/月 ( ...
- IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解,DNS域名设计
本文参考:<计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解> IP地址 概述 计算机要实现网络通信,就必须要有一个用于快速定位的网络地址.IP地址就是计算机在网络 ...
- swiper选项卡还可以左右滑动,最后一个直接跳转链接
整理分享: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf ...
- 前端面试:js数据类型
js数据类型是js中的基础知识点,也是前端面试中一定会被考察的内容.本文旨在知识的梳理和总结,希望读者通过阅读本文,能够对这一块知识有更清晰的认识.文中如果出现错误,请在评论区指出,谢谢. js数据类 ...
- ubuntu13.10安装tomcat
步骤: ubuntu :13.10(32bit) -->i586 jdk 1.7 安装JDK 步骤: 1.官网下载如下图: 2.点击java SE7,下载jdk1.7 3.点击接受,并下载对应的 ...
- CODE 大全网站整站源码分享(带数据库)
CODE 大全是一个偏向于 JavaEE.JavaWeb,WEB 前端,HTML5,数据库,系统运维,编程技术开发的纯个人学习.交流性质的技术博客,一个很不错的网站,现在我免费分享给大家.对 java ...
- 第1节 Scala基础语法:scala中的方法源码分析
val list=List(1,2,3,4) list.reduce((x:Int,y:Int)=>x+y)--->list.reduceLeft((x:Int,y:Int)=>x+ ...
- 安装本地jar到maven仓库
mvn install:install-file -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar -D ...
- 重识线段树——Let's start with the start.
声明 本文为 Clouder 原创,在未经许可情况下请不要随意转载.原文链接 前言 一般地,这篇文章是给学习过线段树却仍不透彻者撰写的,因此在某些简单的操作上可能会一笔带过. 当然了,入门线段树后也可 ...