JZ-014-链表中倒数第 K 个结点
链表中倒数第 K 个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
题目链接: 链表中倒数第 K 个结点
代码
/**
* 标题:链表中倒数第 K 个结点
* 题目描述
* 输入一个链表,输出该链表中倒数第k个结点。
* 题目链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
*/
public class Jz14 {
public ListNode FindKthToTail11(ListNode head, int k) {
if (head == null || k < 1) {
return null;
}
ListNode tail = head;
while (tail != null && k > 0) {
tail = tail.next;
k--;
}
if (k > 0) {
return null;
}
ListNode result = head;
while (tail != null) {
result = result.next;
tail = tail.next;
}
return result;
}
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null || k < 1) {
return null;
}
int cnt = 1;
ListNode node = head;
while (node.next != null) {
node = node.next;
cnt++;
}
if (k > cnt) {
return null;
}
ListNode result = head;
for (int i = 0; i < cnt - k; i++) {
result = result.next;
}
return result;
}
/**
* 方法二:双指针移动
* 设链表的长度为 N。设置两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,
* 可以知道当 P1 移动到链表结尾时,P2 移动到第 N - K 个节点处,该位置就是倒数第 K 个节点。
*
* @param head
* @param k
* @return
*/
public ListNode FindKthToTail2(ListNode head, int k) {
if (head == null) {
return null;
}
ListNode p1 = head;
while (p1 != null && k-- > 0) {
p1 = p1.next;
}
if (k > 0) {
return null;
}
ListNode p2 = head;
while (p1 != null) {
p1 = p1.next;
p2 = p2.next;
}
return p2;
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
Jz14 jz14 = new Jz14();
System.out.println(jz14.FindKthToTail(head, 1).val);
System.out.println(jz14.FindKthToTail2(head, 1).val);
}
}
【每日寄语】 你的好运气藏在你的实力里,也藏在你不为人知的努力里,你越努力就越幸运。
JZ-014-链表中倒数第 K 个结点的更多相关文章
- 014 链表中倒数第k个结点
1.题目 输入一个链表,输出该链表中倒数第k个结点. 2.思路 Java代码,通过校验.代码思路如下:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点 ...
- 剑指offer四:链表中倒数第k个结点
输入一个链表,输出该链表中倒数第K个结点 public class ListNode { int val; ListNode next = null; ListNode(int val) { this ...
- 剑指Offer 链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 法1:设置2个指针p,q.p先移动k次,然后pq同时后移,p到链表尾尾的时候,q指向倒数第k个节点. 注意://需要考虑k=0,以 ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 输出单向链表中倒数第k个结点
描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* ...
- 找出链表中倒数第 k 个结点
/* 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct node { int data; struct node * ...
- 链表中倒数第k个结点
题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 因为是单向链表,如果使用最普通的遍历来解决的话会多出很多不必要的遍历.有一个比较好的解法,设置两个指针两个指针之间差k-1个位置,也就是当后 ...
- IT公司100题-13-求链表中倒数第k个结点
问题描述: 输入一个单向链表,输出该链表中倒数第k个结点.链表倒数第0个节点为NULL. struct list_node { int data; list_node* next; }; 分析: 方法 ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- (剑指Offer)面试题15:链表中倒数第k个结点
题目: 输入一个链表,输出该链表中倒数第k个结点. 例如:链表中有6个结点,从头到尾依次为1,2,3,4,5,6,则该链表的倒数第3个结点为4. 链表结点定义: struct ListNode{ in ...
随机推荐
- 计算机网络再次整理————tcp的关闭[七]
前言 tcp的关闭不是简单粗暴的,相对而言是友好优雅的,好聚好散吧. 那么友好的关闭方式是这样的: 假设这里是客户端请求关闭的,服务端倒过来. 客户端:我要请求关闭 服务端:我接收到你的请求了,等我把 ...
- VsCode配置C/C++开发环境
Visual Studio Code(VS Code)是基于 Electron 开发,支持 Windows.Linux 和 macOS 操作系统.内置了对JavaScript,TypeScript和N ...
- CF1229D - Wojtek and Card Tricks
做法一 首先将排列用康托展开映射到整数,并且预处理出排列之间乘法的结果,复杂度 \(\mathcal{O}(k(k!) ^ 2)\). 枚举左端点,有可能分段的右端点至多只有 \(k!\) 个,不妨将 ...
- 前后端数据json交换的问题
问题1:前端发送给后端数据了,后端也接收到了,后端同时返回数据给前端了,但是前端的ajax请求中的success(data){}中的方法不执行 解决:排查了很多问题,结果都一一排除了,最后发现后端发送 ...
- JAVA多线程学习五:线程范围内共享变量&ThreadLocal
一.概念 可以将每个线程用到的数据与对应的线程号存放到一个map集合中,使用数据时从这个集合中根据线程号获取对应线程的数据,就可以实现线程范围内共享相同的变量. 二.代码 Runnable中的run( ...
- 【Android珍藏】推荐10个炫酷的开源库【转】
感谢大佬:https://www.jianshu.com/p/d608f0228fd4 前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有 ...
- UITableViewCell的contentView
contentView下默认有3个子视图其中2个是UILabel(通过UITableViewCell的textLabel和detailTextLabel属性访问)第3个是UIImageView(通过U ...
- 7.2.*PHP编译安装时常见错误解决办法,php编译常见错误
configure: error: Cannot find ldap.h 检查下面是不是已经安装,如果没有安装之:检查:yum list openldapyum list openldap-dev ...
- C语言中的typedef跟define的区别
今天用C语言练习时涉及到了typedef和define的使用问题,那么他们的区别是啥?这种情况下为什么要用typedef?哪种情况下为什么要用define呢? 学习C的时候的你是否考虑过这个问题呢? ...
- 安装 mysql 8.0后;root用户在客户端连接不上
--- mysql workbench Failed to Connect to MySQL at 10.211.55.6:3306 with user root Authentication plu ...