【Offer】[22] 【链表中倒数第k个结点】
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路分析
- 采用双指针的方法,第一个指针首先向前移动k-1个位置,第二个指针指向头节点,然后将两个指针同时向后移动,如果第一个指针走到链表尾结点时,第二个指针的位置就正好为 倒数第k个节点
测试用例
- 功能测试:第k个节点在链表的中间;第k个节点是链表的头节点;第k个节点是链表的尾节点。
- 特殊输入测试:链表头节点为nullptr指针:链表的节点总数少于k;k等于0。
Java代码
public class Offer22 {
public static void main(String[] args) {
test1();
test2();
test3();
test4();
}
public static ListNode FindKthToTail(ListNode head, int k) {
return Solution1(head, k);
}
/**
* 双指针的方法
* @param head
* @param k
* @return
*/
private static ListNode Solution1(ListNode head, int k) {
if (head == null || k == 0) {
return null;
}
ListNode pBefore = head;
ListNode pBeHind = null;
for (int i = 0; i < k - 1; i++) {
if (pBefore.next != null) {
pBefore = pBefore.next;
} else {
return null;
}
}
pBeHind = head;
while (pBefore.next != null) {
pBefore = pBefore.next;
pBeHind = pBeHind.next;
}
return pBeHind;
}
private static void test1() {
ListNode head = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
head.next = node2;
node2.next = node3;
node3.next = node4;
ListNode kthNode = FindKthToTail(head, 4);
System.out.println("{1,2,3,4},4 ---> " + kthNode.val);
}
private static void test2() {
ListNode head = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
head.next = node2;
node2.next = node3;
node3.next = node4;
ListNode kthNode = FindKthToTail(head, 5);
if (kthNode == null) {
System.out.println("{1,2,3,4},5---> null ");
} else {
System.out.println("测试失败!");
}
}
private static void test3() {
ListNode head = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
head.next = node2;
node2.next = node3;
node3.next = node4;
ListNode kthNode = FindKthToTail(head, 0);
if (kthNode == null) {
System.out.println("{1,2,3,4},0---> null ");
} else {
System.out.println("测试失败!");
}
}
private static void test4() {
ListNode head = null;
ListNode kthNode = FindKthToTail(head, 4);
if (kthNode == null) {
System.out.println("{null},4---> null ");
} else {
System.out.println("测试失败!");
}
}
}
代码链接
【Offer】[22] 【链表中倒数第k个结点】的更多相关文章
- 【Java】 剑指offer(22) 链表中倒数第k个结点
正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的 ...
- 剑指Offer:链表中倒数第k个结点【22】
剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...
- 剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可. package com.walega ...
- 力扣 - 剑指 Offer 22. 链表中倒数第k个节点
题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...
- LeetCode 剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个 ...
- Go语言实现:【剑指offer】链表中倒数第k个结点
该题目来源于牛客网<剑指offer>专题. 输入一个链表,输出该链表中倒数第k个结点. Go语言实现: type ListNode struct { Val int Next *ListN ...
- 剑指offer:链表中倒数第k个结点
问题描述 输入一个链表,输出该链表中倒数第k个结点. 解题思路 两个指针都指向头结点,第一个指针先移动k-1个结点,之后两指针同时移动,当第一个指针到链表尾的时候,第二个指针刚好指向倒数第k个结点. ...
- 剑指Offer 14. 链表中倒数第k个结点 (链表)
题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?t ...
- 剑指offer例题——链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 编程过程 此处采用两个指针依次后移的方法来求解,首先,用一个指针移到第k个位置,之后将第二个指针放在第一位,与第二个指针一同移动,当第二个指针移动 ...
- 《剑指offer》链表中倒数第k个结点
一.题目描述 输入一个链表,输出该链表中倒数第k个结点. 二.输入描述 一个链表 三.输出描述 链表的倒数第k个结点 四.牛客网提供的框架 /* struct ListNode { int val; ...
随机推荐
- 佳木斯集训Day5
今天是ACM赛制...本来可以400的,结果毒瘤T2模拟硬生生卡掉了我90分 T1是个大水题,找规律,5分钟AC没啥压力 #include <bits/stdc++.h> #define ...
- 【杂项】关于NOIP2018复赛若干巧合的声明
导言 参加NOIP2018时本人学龄只有两个月,却斩获了省一等奖,保送了重点中学,这看上去是个我创造的神话,然而,在我自己心中,我认为这只是个巧合(其实我认为运气也是实力的一部分),接下来,我将说明一 ...
- Spider & CrawlSpider
CrawlSpide 最重要的是分析源码官方文档百度收搜 Spider document 就是官方文档了1.3的源码分析CrawlSpide 是爬取一个网站常用的规则 它是对spider进一步的包装 ...
- RocketMQ中PullConsumer的消息拉取源码分析
在PullConsumer中,有关消息的拉取RocketMQ提供了很多API,但总的来说分为两种,同步消息拉取和异步消息拉取 同步消息拉取以同步方式拉取消息都是通过DefaultMQPullConsu ...
- python基础知识 01
一.计算机基础知识 计算机有硬件+操作系统+软件应用组成 cpu:人的大脑 内存:人的临时记忆 硬盘:人的永久记忆 操作系统 控制计算机硬件工作的流程 应用程序 安装在操作系统上的软件 二.Pytho ...
- 记一次mysql主从同步因断电产生的不能同步问题 1236 1032
背景: 项目新上线一个月,qa需要测试断电服务拉起,服务拉起成功后,发现mysql主从异常,以下是发现的问题以及解决方案 问题1: Slave_IO_Running: No 一方面原因是因为网络通信 ...
- 100天搞定机器学习|Day21 Beautiful Soup
前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...
- react中babel的使用
在开发中经常会使用到es6语法,那么如何能够很好兼容es6写法呢
- (四)Lock,ReentrantLock,ReentrantReadWriteLock类的使用以及相关api---synchronized进阶
这篇博客记录了Lock,ReentrantLock,ReentrantReadWriteLock类的使用以及其一些api: 码字不易~~另外<java多线程编程核心技术>这本书读着很爽 前 ...
- 玩转VSCode插件之Remote-SSH
前言 每当更换电脑就要从新搭建一遍开发环境... 每当拉完最新代码程序在本地跑不起来的时候就要检查服务器和开发电脑的环境... 每当服务器上出Bug的时候就想如果可以能够调试服务器代码多好啊.. 你是 ...