美文网首页数据结构与算法Java篇
找到输入一个链表,输出该链表中倒数第k个结点

找到输入一个链表,输出该链表中倒数第k个结点

作者: NetCedar | 来源:发表于2018-10-14 18:57 被阅读0次

    问题描述
           只进行一次遍历,找到链表中倒数第k个结点
    解法思路
          定义2个指针,先让第一个指针走k-1步,第二个指针才开始走,当第一个指针指向链表尾部的时候,第一个指针就指向倒数第k个节点

    public class FindKthToTail {
        /**
         * 创建listNode节点
         */
        private static class ListNode{
           int val;
           ListNode next=null;
    
            public ListNode() {
            }
    
            public  ListNode(int val) {
                this.val = val;
            }
        }
        public FindKthToTail() {
        }
            /**
             *
             * @param head
             * @param k
             * @return
             * 找到输入一个链表,输出该链表中倒数第k个结点
             * 链表只遍历一次
             */
            public static ListNode FindKthToTail(ListNode head, int k) {
                //鲁棒性考虑
                if (head==null||k==0){  //输入空的情况
                    return null;
                }
                //定义两个指针
                ListNode first=head;
                ListNode second=head;
                //先让第一个指针走k-1次
                for (int i=0;i<k-1;i++){
                    if(first.next!=null){
                        first=first.next;
                        System.out.println("firsrt:"+first.val);
                    }else {
                        return null; //如果输入的k值太大,比如求倒数第五个节点 链表长度为4
                    }
                }
                while (first.next!=null){
                    //然后两个指针同时后走,当第一个指针走到尾的时候,第二个指针刚好就再k上面
                    first=first.next;
                    second=second.next;
                }
                System.out.println("result:"+second.val);
                return second;
            }
    
        public static void main(String[] args) {
            ListNode node=new ListNode(1);
            node.next=new ListNode(2);
            node.next.next=new ListNode(3);
            node.next.next.next=new ListNode(4);
            node.next.next.next.next=new ListNode(5);
            node.next.next.next.next.next=new ListNode(6);
            ListNode r=FindKthToTail(node,5);
    
        }
    }
    

    相关文章

      网友评论

        本文标题:找到输入一个链表,输出该链表中倒数第k个结点

        本文链接:https://www.haomeiwen.com/subject/ifdtzftx.html