牛客(14)链表中倒数第k个结点

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

        ListNode(int val) {
            this.val = val;
        }
    }
    public static ListNode FindKthToTail(ListNode head,int k) {

        Stack<ListNode> listNodeStack = new Stack<ListNode>();
        while(head!=null){
            listNodeStack.push(head);
            head=head.next;
        }
        while (!listNodeStack.isEmpty()){
            if (k==1){
                return listNodeStack.pop();
            }
            k--;
            listNodeStack.pop();

        }
        return null;
    }

原文地址:https://www.cnblogs.com/kaibing/p/8997523.html

时间: 2024-11-08 23:41:14

牛客(14)链表中倒数第k个结点的相关文章

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

题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 三个特例:如果输入的链表为空:k大于链表的长度:k为0的情况.对于正常情况,设置两个指针分

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

题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目解答 方法一: /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null || k<1){ return null;

14 链表中倒数第K个节点 FindKthToTail

输入一个链表,输出该链表中倒数第k个结点. 核心思想: 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点. 然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了 时间复杂度O(n),一次遍历即可 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val;

剑指 14. 代码的鲁棒性 链表中倒数第k个结点

题目描述 输入一个链表,输出该链表中倒数第k个结点. 本人渣渣思路:要求解链表中的倒数第k个结点,可以采用栈先进后出的特点,倒数第k个进栈的话,出栈的时候就是第k个出栈的了 那么一开始就遍历链表,然后将每个结点进栈,在将栈的第k个结点出栈即可 import java.util.Stack;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public c

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

题目描述 输入一个链表,输出该链表中倒数第k个结点. 题解一:栈 1 public static ListNode FindKthToTail(ListNode head,int k) { 2 if(head==null||k<=0){ 3 return null; 4 } 5 Stack<ListNode> stack = new Stack<>(); 6 while (head!=null){ 7 stack.push(head); 8 head=head.next; 9

14.链表中倒数第k个节点

题目描述: ??输入一个链表,输出该链表中倒数第k个结点. 思路分析: ??设置两个指针,一个fast一个slow,都从链表头开始,让fast先走k步,然后两个指针一起走,当fast走到尾部,那么slow指针指向的就是倒数第K个节点. 代码: public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode fast=head; ListNode slow=head; if(head==nu

剑指offer | 链表中倒数第k个结点

先做做一些简单题找找手感,还有赞一个牛客的OJ,这样的提交方式很好,ACM那种对输入出处格式对于没有接触过ACM的人来说比较头疼,华为OJ那种格式描述不清楚的就更头疼了,卡在输入输出上就悲剧了,当然,输入输出也是需要了解的. 顺便吐槽一下华为SO挑战赛:题意有模糊的地方,挑战赛的题目没有区分度,作弊监管太松,判分规则未公开说明. 题目描述:输入一个链表,输出该链表中倒数第k个结点. 题目解析:设两个同步后移.相距k的指针就行,前面的指针触底,后面的指针即是倒数k个节点. 代码如下: 1 /* 2

《剑指offer》第二十二题:链表中倒数第k个结点

// 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, // 从头结点开始它们的值依次是1.2.3.4.5.6.这个链表的倒数第3个结点是 // 值为4的结点. #include <cstdio> #include "List.h" ListNode* FindKthToTail(ListNode* pListHead, unsi

高质量代码-链表中倒数第k个结点

题目描述: 输入一个链表,输出该链表中倒数第k个结点. 思路: 首先检查参数的合法性,head==null或节点数小于k都直接返回null. 让head先前进k-1步,ans指向头结点,然后head前进一步,ans也前进一步.当head到达最后一个节点时,ans指向倒数k个节点.时间复杂度O(n). 解决: 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 thi