• 链表中倒数第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;
    }
    };
    无脑写法
  • 相关阅读:
    Total Video Converter v3.71 注册码
    Web下载文件
    语音朗读
    SQLSERVER 删除重复记录
    Windows8[启用IIS8 asp.net功能]
    黑链代码
    在ASP.NET中防止注入攻击[翻译]
    Oracle 正确删除archivelog文件
    浅谈网站黑链检测和清除的方法
    解密SQLServer2000加密存储过程,函数,触发器,视图
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12493016.html
Copyright © 2020-2023  润新知