链表中倒数第 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 个结点的更多相关文章

  1. 014 链表中倒数第k个结点

    1.题目 输入一个链表,输出该链表中倒数第k个结点. 2.思路 Java代码,通过校验.代码思路如下:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点 ...

  2. 剑指offer四:链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第K个结点 public class ListNode { int val; ListNode next = null; ListNode(int val) { this ...

  3. 剑指Offer 链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点.     思路: 法1:设置2个指针p,q.p先移动k次,然后pq同时后移,p到链表尾尾的时候,q指向倒数第k个节点. 注意://需要考虑k=0,以 ...

  4. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...

  5. 输出单向链表中倒数第k个结点

    描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int       m_nKey; ListNode* ...

  6. 找出链表中倒数第 k 个结点

    /* 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct node { int data; struct node * ...

  7. 链表中倒数第k个结点

    题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 因为是单向链表,如果使用最普通的遍历来解决的话会多出很多不必要的遍历.有一个比较好的解法,设置两个指针两个指针之间差k-1个位置,也就是当后 ...

  8. IT公司100题-13-求链表中倒数第k个结点

    问题描述: 输入一个单向链表,输出该链表中倒数第k个结点.链表倒数第0个节点为NULL. struct list_node { int data; list_node* next; }; 分析: 方法 ...

  9. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  10. (剑指Offer)面试题15:链表中倒数第k个结点

    题目: 输入一个链表,输出该链表中倒数第k个结点. 例如:链表中有6个结点,从头到尾依次为1,2,3,4,5,6,则该链表的倒数第3个结点为4. 链表结点定义: struct ListNode{ in ...

随机推荐

  1. 学习JAVAWEB第十二天

    ## Servlet: 1. 概念 2. 步骤 3. 执行原理 4. 生命周期 5. Servlet3.0 注解配置 6. Servlet的体系结构 Servlet -- 接口 | GenericSe ...

  2. 如何保存并复制python虚拟环境

    关于虚拟环境的一些基础概念学习了本期视频 保存 以我的一个虚拟环境示例: 在要保存的虚拟环境下使用: pip freeze > requirements.txt 复制 pip install - ...

  3. linux apache软件安装

    安装提示 Linux下,源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). 过程中用到"configure --prefix=安装 ...

  4. docker 安装遇到404 not find

    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce/repodata/repomd.xml: [Errno 14] HTTPS E ...

  5. java 变量的定义 类型转换 基本的数据类型

    package com.aaa.zxf.ajax.test; import org.junit.Test; /** * 六. * 如何在ideal的maven项目中导入 Test 测试类? * * * ...

  6. iOS9新特性之常见关键字

    /* nullable:1.怎么使用(语法) 2.什么时候使用(作用) nullable作用:可能为空 nullable 语法1 @property (nonatomic, strong, nulla ...

  7. vi TOhtml:复制保持格式和高亮

    1. 文本编辑:在vim中编辑好,复制到opera mail中就会格式错乱,比如:行前空格.缩进消失:2. 代码复制到其他地方,无法显示彩色高亮:找到了一个变通方案:使用TOhtml把vim内容转换为 ...

  8. position和anchorPoint笔记

    position和anchorPoint是CAlayer的两个属性.     我们以前修改一个控件的位置都是能过Frame的方式进行修改.     现在利用CALayer的position和ancho ...

  9. hibernate中的一级缓存与闪照区

    首先Hibernate中的一级缓存默认是打开的,并且范围从session创建到session关闭,存储的数据必须是持久态的数据. 1 //从session创建开始,一级缓存也跟着创建 2 Sessio ...

  10. autorelease注意事项

    1.autorelease使用注意 并不是放到自动释放池代码中,都会自动加入到自动释放池 @autoreleasepool { // 因为没有调用 autorelease 方法,所以对象没有加入到自动 ...