• 【剑指offer】链表中的倒数第k个结点


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

    分析:

    定义两个结点p1和p2都指向头节点,p1先走k-1步,然后p1和p2一起走,当p1走到链表尾部时,p2指向的结点就是倒数第k个结点

    遍历一遍链表即可,时间复杂度O(N)

    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
    {
        if(pListHead==NULL||k==0)
            return NULL;
    
        ListNode *p1,*p2;
        p1=pListHead;
        p2=pListHead;
        
        //先走k-1步
        int x=k-1;
        while(x&&p1!=NULL)
        {
            p1=p1->next;
            x--;
        }
        if(p1==NULL)
            return NULL;
        
        //一起走,当p1走到末尾时,p2指向的结点就是倒数第k个结点
        while(p1->next!=NULL)
        {
            p2=p2->next;
            p1=p1->next;
        }
        return p2;
    }



  • 相关阅读:
    5
    4
    2
    3
    1
    IOS js交互
    vm安装mac
    索引
    ORM 基础
    reids 日志no
  • 原文地址:https://www.cnblogs.com/yinbiao/p/11567683.html
Copyright © 2020-2023  润新知