牛客网在线编程专题《剑指offer-面试题15》链表中倒数第k个节点
题目链接:
https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述:
解题思路:
(1)方法一:两次遍历链表
统计出链表中总共有多少个元素,然后找到第K个元素的位置,最后从链表的头部开始遍历到第k个元素的位置。
已经AC的代码:
public class findKthNode {class ListNode{int val;ListNode next = null;public ListNode(int data) {this.val = data;}}public ListNode head;public void createLinkedList(int data) {if(head == null) {head = new ListNode(data);}else {ListNode node = new ListNode(data);node.next = head;head = node;}}public ListNode FindKthToTail(ListNode head,int k) {int count = 1;ListNode node = head;if(head == null) {return null;}while(node.next != null) {count++;node = node.next;}if(k > count) {return null;}node = head;for(int i=0; i<count-k; i++) {node = node.next;}return node;}public static void main(String[] args) {findKthNode list = new findKthNode();for(int i=0; i<10; i++) {list.createLinkedList(i);}System.out.println(list.FindKthToTail(list.head, 10).val);}}
上面方法的缺点:
对于上面的方法,我们需要遍历链表两次,第一次统计出链表中节点的个数,第二次就能找到倒数第k个节点。但是当我们把这个思路解释给面试官之后,他会告诉我们他期待的解法只需要遍历链表一次。
(2)方法二:遍历一次链表
思路:
数据结构:单链表
算法:双指针
注意:代码的鲁棒性
已经AC的代码:
public class findKthNode {class ListNode{int val;ListNode next = null;public ListNode(int data) {this.val = data;}}public ListNode head;public void createLinkedList(int data) {if(head == null) {head = new ListNode(data);}else {ListNode node = new ListNode(data);node.next = head;head = node;}}public ListNode FindKthToTail(ListNode head,int k) {if(head == null || k == 0) {return null;}ListNode p1 = head;ListNode p2 = null;for(int i=0; i<k-1; i++) {if(p1.next != null) {p1 = p1.next;}else {return null;}}p2 = head;while(p1.next!=null) {p1 = p1.next;p2 = p2.next;}return p2;}public static void main(String[] args) {findKthNode list = new findKthNode();for(int i=0; i<10; i++) {list.createLinkedList(i);}System.out.println(list.FindKthToTail(list.head, 10).val);}}
牛客网在线编程专题《剑指offer-面试题15》链表中倒数第k个节点相关推荐
- 剑指Offer - 面试题22. 链表中倒数第k个节点(快慢指针)
1. 题目 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5 ...
- 剑指offer面试题[15]-链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 假设链表有n个结点,那么倒数第k个结点就是从头结点开始的第n-k+1个结点,我们只要从头结点开始往后走n-k+1步就可以了.那么问题来了: ...
- 剑指offer面试题22. 链表中倒数第k个节点(链表)
题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...
- 剑指offer(C++)-JZ22:链表中倒数最后k个结点(数据结构-链表)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点 ...
- 【剑指offer-Java版】15链表中倒数第K个结点
链表中倒数第K个结点:快慢指针解决 需要注意的地方是 1) 可能会存在输入的链表大小小于k 2) 输入的k可能小于等于0 - 所以必须限定k大于0 public class _Q15 {public ...
- 牛客网在线编程专题《剑指offer-面试题28》字符串的排列
我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容,分享 ...
- 牛客网在线编程专题《剑指offer-面试题33》把数组排成最小的数
我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容, ...
- 牛客网在线编程专题《剑指offer-面试题39:题目二》判断是否是平衡二叉树
题目链接: https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192& ...
- 剑指offer:面试题22. 链表中倒数第k个节点
题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...
最新文章
- CDOJ1633 Video Game Combos [AC自动机+dp]
- CoreAnimation编程指南(三)几何变换
- UIWebView / NSURL / NSBoundle 相关应用 (实例,加载完成前的背景, 默认safari打开链接地址等)...
- 一些sql语句的详细解释
- JSP的Listener介绍
- WebService /php soap 相关调用 收藏
- c ringbuffer 源码_Python Ring Buffer的实现
- EasyNVR调16分屏播放ws-flv内存溢出导致浏览器崩溃问题的解决
- 日立hgp电梯mcub03主板原理图
- 程序员高手必会的十大编程算法
- lg相乘公式_ln公式(lg公式大全)
- VIN码/车架号的详解,车架号识别,VIN码识别,OCR车架号识别能带来什么
- 【iOS】崩溃收集和解析
- between and 用法
- 系统命名法(IUPAC命名法)
- 软件架构模式 mark Richards - 读后总结 3 - 微内核架构
- 2023年湖北武汉建设厅特种工架子工证怎么报名?报考条件?启程别
- Tacotron以及Tacotron2详解
- AtCoder Grand Contest 012 E - Camel and Oases 状压dp
- 我是没有口袋的哆啦a梦