剑指:链表中倒数第k个节点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
解法
pre 指针走 k-1 步。之后 cur 指针指向 phead,然后两个指针同时走,直至 pre 指针到达尾结点。
即cur与pre始终相距k-1。
当用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些。
此题需要考虑一些特殊情况。比如 k 的值小于 0 或者大于链表长度。
package demo;
public class Solution {
public static class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public static ListNode findKthtoTail(ListNode head, int k){
if(head == null || k<1){
return null;
}
ListNode pre = head;
for(int i=0; i<k-1;i++){//先将pre指针移到第k-1位
if(pre.next != null)
pre = pre.next;
else
return null;
}
ListNode cur = head;
while(pre.next != null){//遍历
pre = pre.next;
cur = cur.next;
}
return cur;
}
public static void main(String[] args) {
ListNode head = new ListNode(0);
ListNode node1 = new ListNode(1); head.next = node1;
ListNode node2 = new ListNode(2); node1.next = node2;
ListNode node3 = new ListNode(3); node2.next = node3;
ListNode node4 = new ListNode(4); node3.next = node4;
ListNode node5 = new ListNode(5); node4.next = node5;
ListNode node6 = new ListNode(6); node5.next = node6;
ListNode node7 = new ListNode(7); node6.next = node7;
ListNode node8 = new ListNode(8); node7.next = node8;
ListNode node9 = new ListNode(9); node8.next = node9;
ListNode node10 = new ListNode(10); node9.next = node10;
ListNode cur = head;
while(cur.next != null){
cur = cur.next;
System.out.print(cur.val + " ");
}
int k = 4;
ListNode resNode = findKthtoTail(head, k);
System.out.println("\n链表倒数第"+k+"个元素为:" + resNode.val);
}
}
只要从头走n-k+1步即可。
剑指:链表中倒数第k个节点的更多相关文章
- 《剑指offer》 链表中倒数第k个节点
本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...
- 剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可. package com.walega ...
- 【剑指offer】22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 知识点:链表:双指针 题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例 ...
- 力扣 - 剑指 Offer 22. 链表中倒数第k个节点
题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...
- 【剑指Offer】链表中倒数第k个节点 解题报告(Python)
[剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- LeetCode 剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个 ...
- 剑指offer-第三章高质量的代码(输出该链表中倒数第K个节点)
题目:输入一个链表,输出这个链表中倒数第K个节点.(代码的鲁棒性) 思路:用两个指针p1和p2,都指向头节点,开始的时候,p2不动,p1移动k-1次,指向第k个节点.此时,如果p1->next! ...
- 剑指offer(14)链表中倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个节点. 题目分析 用两个指针来跑,两个指针中间相距k-1个节点,第一个指针先跑,跑到了第k个节点时,第二个指针则是第一个节点. 这时候两个一起跑.当第一个 ...
- 【剑指offer】面试题 22. 链表中倒数第 K 个节点
面试题 22. 链表中倒数第 K 个节点
- 【剑指Offer】面试题22. 链表中倒数第k个节点
题目 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...
随机推荐
- StarUML 系列,静态图与动态图,用例图,类图
大部分: 静态图部分,即静态不动的图 1.用例图, Use case diagram 1.展示系统核心功能及与其交互的用户ACTOR 表示:椭圆
- 20180711模拟赛T3——聚变
文件名: fusion 题目类型: 传统题 时间限制: 3秒 内存限制: 256MB 编译优化: 无 题目描述 知名科学家小A在2118年在计算机上实现了模拟聚变的过程. 我们将她研究的过程简化. 核 ...
- Computer Network Chapter4 solution
1.以太网使用曼彻斯特编码,效率50% 2.侦听信道时间:来回延时时间(10usec):发送数据(25.6usec): 3.单向时延t=S(距离)/V(电缆传输速率):最小帧长=2*t*C(数据传输速 ...
- 【未完成】【plsql】与oracle配置
待写——————————————————————————————————————-
- Office 2016正式版/2019预览版 使用注意
改写状态已经被隐藏 右击Word状态栏可以看到改写是否打开
- Spring Boot 知识笔记(集成zookeeper)
一.本机搭建zookeeper伪集群 1.下载安装包,复制三份 2.每个安装包目录下面新建一个data文件夹,用于存放数据目录 3.安装包的conf目录下,修改zoo.cfg配置文件 # The nu ...
- find square root
public class Solution { public static void main(String[] args) { Scanner ip = new Scanner(System.in) ...
- 可以在shell脚本中使用哪些类型的变量?
在shell脚本,我们可以使用两种类型的变量: 系统定义变量 用户定义变量 系统变量是由系统系统自己创建的.这些变量通常由大写字母组成,可以通过“set”命令查看. 用户变量由系统用户来生成和定义,变 ...
- vue组件component没效果
如果实在不知道问题所在,你就看看你的component的命名是不是驼峰命名
- BizTalk增强型RosettaNet跟踪报告
BizTalk 的数据报表能力一直是比较弱的,好在Rosettanet 支持使用BAM 跟踪功能来跟踪各PIP消息状态.增强的跟踪功能能跟踪流程为消息.错误和事件.不可否认性的数据.可以根据跟踪的 ...