zoukankan      html  css  js  c++  java
  • 链表中倒数第k个结点

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

    思路一:先遍历整个链表,统计链表的个数,然后总个数-k就是所求的结果

    但是太无脑了

    所以思路二:

    用两个指针, first 和 second

    first先走k-1次,然后second再走,当first 到最后一个,second就是所求的了

     代码:

    // 两个指针,一个在前(先走k-1次),第二个在走
    //当第一个到头了,第二个就是倒数k个
    class Solution {
    public:
        ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if(pListHead == nullptr ||k <= 0)
            return nullptr;
        ListNode *first = pListHead;
        ListNode *second = pListHead;
        for(int i = 0; i < k-1; i++)
        {
            if (first->next != nullptr)
                first = first->next;
            else
                return nullptr;
        }
        while(first->next != nullptr)
        {
            first = first->next;
            second = second->next;
        }
        return second;
        
        }
    };
    /*
    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; 
        int num = 1;
        ListNode *p1 = pListHead;
        ListNode *p2 = pListHead;
        while(p1->next != nullptr)
        {
            num++;
            p1 = p1->next;
        }
        int t = num-k;
        if (t < 0)
            return nullptr;
        while(t--)
        {
            p2 = p2->next;
        }
        return p2;
    }
    };
    无脑写法
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12493016.html
Copyright © 2011-2022 走看看