题目描述

输入一个链表,输出该链表中倒数第k个结点。例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5

节点定义如下:

public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}

思路一:

设置一个快指针,一个慢指针。像一把尺子,当尺子的一端移动到链表的末尾,则另一端则为倒数第k个节点。

public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0)
return null;
ListNode p,q; //定义两个快慢指针,制造一把尺子
p=q=head;
int i=0;
for(;p!=null;i++){
if(i>=k)
q=q.next;
p=p.next;
}
return i<k?null:q;
}
}

思路二:

两次遍历。第一次遍历出链表的长度n,第二次遍历获取链表第n-k+1个节点。

public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0)
return null;
//1.遍历链表的长度
int n=0;
ListNode tempNode = head;
while(tempNode!=null){
n++;
tempNode = tempNode.next;
}
if(k>n)
return null;
//2.遍历获取第n-k+1个节点
for(int i=0;i<n-k;i++){
head = head.next;
}
return head;
}
}

思路三:

借助栈来存储所有节点,在利用出栈获取倒数第k个节点

public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0)
return null;
//1.借助栈来存储节点
Stack<ListNode> stack = new Stack<>();
while(head!=null){
stack.push(head);
head=head.next;
}
//判断k是否越界
if(k>stack.size())
return null;
//2.出栈来获取倒数第k个节点
while(k>1){
stack.pop();
k--;
}
return stack.pop();
}
}

剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。的更多相关文章

  1. 剑指offer 1,输入一个字符串,将字符串的空格替换成%20

    剑指offer 1,输入一个字符串,将字符串的空格替换成%20    function replaceSpace(str){      return str.replace(/\s/g,"% ...

  2. 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。

    一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...

  3. 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。

    1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...

  4. 剑指Offer 14. 链表中倒数第k个结点 (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?t ...

  5. [剑指offer] 14. 链表中倒数第K个节点+翻转+逆序打印+合并两个排序链表 + 链表相交(第一个公共节点) (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:  两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相 ...

  6. 剑指offer 14. 链表中倒数第 k 个结点

    14. 链表中倒数第 k 个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点 法一:快慢指针 快指针先走 k 步,等快指针到达尾部时,慢指针所指结点即是倒数第 k 个结点 public cla ...

  7. 剑指offer 14:链表中倒数第k个节点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. /* public class ListNode { int val; ListNode next = null; ListNode(int va ...

  8. 《剑指offer》— JavaScript(14)链表中倒数第k个结点

    链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点: 然后两个指针同时 ...

  9. 【剑指Offer】14、链表中倒数第k个结点

      题目描述:   输入一个链表,输出该链表中倒数第k个结点.为了符合习惯,从1开始计数,即链表的尾结点是倒数第1个节点.例如,一个链表有6个结点,从头结点开始,它们的值依次是1,2,3,4,5,6. ...

随机推荐

  1. plsql连接问题

    PLsql好久没用了,今天想用的时候,发现自己忘记本地实例(system)的密码了,试了几个自己常用的密码都不对,提示“ORA-01017:invalid username/password;logo ...

  2. 从零开始搭建系统2.5——Apollo安装及配置

    参见https://github.com/ctripcorp/apollo/wiki/Quick-Start安装即可

  3. 笔记40 Spring Web Flow——订单流程(构建订单)

    二.订单子流程 在识别完顾客之后,主流程的下一件事情就是确定他们想要什么类型 的披萨.订单子流程就是用于提示用户创建披萨并将其放入订单中 的,如下图所示. showOrder状态位于订单子流程的中心位 ...

  4. C# 简单的统计指定几个字符组合的所有结果

    比如 用 a,b,c,d 4个字符组成一个8个长度的字符串,问一共有多少可能,应该有4的8次方种,用代码简单实现 private string[] AAA() { string[] cs = { &q ...

  5. vue 外卖app (1) 项目目录介绍

    api 与后台交互文件夹 common 通用资源文件夹 components  非路由组件文件夹 filters   自定义过滤器模块文件夹 mock 模拟数据文件夹 pages  路由组件文件夹 r ...

  6. vue 监听的使用

    watch:{    监听的属性:function(旧值,新值) {       } }   代码: <!DOCTYPE html> <html lang="en" ...

  7. JAVA去除抖音视频的水印源码!!!

    @PostMapping("geturl") public DataResponse decodeDouiyin(@RequestBody DouyinRequest req ) ...

  8. SSM基本配置

    1. 首先从web.xml配置入手 A: <!-- spring的监听器 --> <listener> <listener-class>org.springfram ...

  9. sublime中Snippe的使用

    Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜欢上的..Sublime Text 2使用心得 ...

  10. Perl 条件语句

    Perl 条件语句 Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: 注意,数字 0, 字符串 '0' . & ...