zoukankan      html  css  js  c++  java
  • 剑指offer_14:链表中倒数第k个节点

    输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

    示例:
    给定一个链表: 1->2->3->4->5, 和 k = 2.
    返回链表 4->5.

    1、双指针

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode getKthFromEnd(ListNode head, int k) {
            ListNode p1=head,p2=head;
            while(p2!=null&&k>0){
                p2=p2.next;
                k--;
            }
            while(p2!=null){
                p2=p2.next;
                p1=p1.next;
            }
            return p1;
        }
    }
    

    2、栈

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode getKthFromEnd(ListNode head, int k) {
            Stack<ListNode> stack=new Stack<>();
            ListNode node=head;
            while(node!=null){
                stack.push(node);
                node=node.next;
            }
            while(k>0){
                node=stack.pop();
                k--;
            }
            return node;
        }
    }
    

    3、递归

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        int size=0;
        public ListNode getKthFromEnd(ListNode head, int k) {
            if(head==null){
                return head;
            }
            ListNode node=getKthFromEnd(head.next,k);
            if(++size==k){
                return head;
            }
            return node;
        }
    }
    
  • 相关阅读:
    [20190507]sga_target=0注意修改_kghdsidx_count设置.txt
    进程与线程的区别和联系
    html option选中 回显 取值
    application.properties详解 --springBoot配置文件
    Address already in use: JVM_Bind:8080错误的解决办法
    垃圾回收监视和分析
    垃圾回收器种类
    Java垃圾回收是如何工作的?
    Java垃圾回收简介
    关于堆栈的详细讲解
  • 原文地址:https://www.cnblogs.com/xyz-1024/p/14050166.html
Copyright © 2011-2022 走看看