zoukankan      html  css  js  c++  java
  • 剑指Offer-14.链表中倒数第k个结点(C++/Java)

    题目:

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

    分析:

    第一个解法,我们可以先遍历一遍链表,计算下节点的总数n,然后再从头结点查n-k个节点,即是倒数第k个节点。

    第二个解法,便是使用双指针,两个指针都先指向头节点,第一个指针先前进k-1个节点,然后两指针一起前进,当第一个指针到达尾节点时,第二个指针指的节点便是我们要求的。

    此外要注意当k为0时要返回null,而且如果k大于链表中的节点个数,也要返回null。

    程序:

    C++

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
            if(pListHead == nullptr || k == 0)
                return nullptr;
            ListNode* pFirst = pListHead;
            ListNode* pSecond = pListHead;
            for(int i = 0; i < k-1; ++i){
                if(pFirst->next != nullptr)
                    pFirst = pFirst->next;
                else
                    return nullptr;
            }
            while(pFirst->next != nullptr){
                pFirst = pFirst->next;
                pSecond = pSecond->next;
            }
            return pSecond;
        }
    };

    Java

    /*
    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 == 0)
                return null;
            ListNode pFirst = head;
            ListNode pSecond = head;
            
            for(int i = 0; i < k-1; ++i){
                if(pFirst.next != null)
                    pFirst = pFirst.next;
                else
                    return null;
            }
            while(pFirst.next != null){
                pFirst = pFirst.next;
                pSecond = pSecond.next;
            }
            return pSecond;
        }
    }
  • 相关阅读:
    次小生成树(SST)
    传纸条(scrip)
    动态规划练习5
    动态规划练习4
    整数的lqp拆分
    [HNOI2002]跳蚤
    BZOJ1803: Spoj1487 Query on a tree III
    51nod-1526: 分配笔名
    51nod-1615: 跳跃的杰克
    BZOJ2588: Spoj 10628. Count on a tree
  • 原文地址:https://www.cnblogs.com/silentteller/p/11879142.html
Copyright © 2011-2022 走看看