zoukankan      html  css  js  c++  java
  • 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。

    题目描述

    输入一个链表,输出该链表中倒数第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();
        }
    }
  • 相关阅读:
    多样三角形
    字符串转化去重
    捕获异常里面的特殊异常
    sqlalchemy.exc.CompileError: (in table 'language_label', column 'name'): VARCHAR requires a length o
    机器学习总结
    找出两个列表中相同元素与不同元素
    正则去重
    mysql5.7 安装重置密码
    chrome快捷键
    golang select
  • 原文地址:https://www.cnblogs.com/zengcongcong/p/11452469.html
Copyright © 2011-2022 走看看