美文网首页
面试题22:链表的倒数第k个节点

面试题22:链表的倒数第k个节点

作者: 繁星追逐 | 来源:发表于2019-11-08 17:31 被阅读0次

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

    思路:采用双指针找到倒数第k个节点。设立两个指针,第一个指针先走k-1步,第二个指针此时开始和第一个指针一起出发,保证两个指针的索引之和为k+1。

    代码如下:

    public class FindKthFromLinkList {
        public class ListNode{
            int val;
            ListNode next = null;
    
            ListNode(int val){
                this.val = val;
            }
        }
    
        public ListNode FindKthToTail(ListNode head,int k) {
             if (head == null || k==0){
                 return null;
             }
             int length = 1;
             ListNode p = head;
             while (p.next != null){
                 length++;
                 p = p.next;
             }
             if (k>length){
                 return null;
             }
             ListNode node = head;
             for (int i=1;i<length-k+1;i++){
                 node = node.next;
             }
             return node;
        }
        public ListNode FindKthToTail1(ListNode head,int k) {
            if (head == null || k==0){
                return null;
            }
            ListNode node = head;
            ListNode listNode = head;
    
            for (int i=0;i<k-1;i++){
                if (node.next == null){
                    return null;
                }
                node = node.next;
            }
            ////从k开始,同时进行,保证和为k+1
            while (node.next != null){
                node = node.next;
                listNode = listNode.next;
            }
    
            return listNode;
        }
    }
    

    启发:
    如果在链表中寻找节点类似的题目可以考虑用多指针的形式,一般是其中一个指针先走几步,然后同时走,或者其中一快一慢两个指针的形式解决问题
    例如找链表的中间节点,可以设置快慢指针,2倍的关系,当快指针到达最后一个节点时,即慢指针到达了中间节点。

    相关文章

      网友评论

          本文标题:面试题22:链表的倒数第k个节点

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