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;
    }
    };
    无脑写法
  • 相关阅读:
    W phase 学习
    有限破裂矩张量的发展历史
    Capjoint
    JavaScript之Function类型
    ThreadLocal学习资料
    Shiro学习资料
    jstl学习资料
    分页框架pager-taglib学习笔记
    MyBatis3学习笔记(曹锋老师版)
    关于处理日期格式化问题遇到的一个坑
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12493016.html
Copyright © 2011-2022 走看看