输入一个链表,输出该链表中倒数第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;
}



相关文章:

  • 2021-04-23
  • 2021-12-12
  • 2021-08-13
  • 2021-06-30
  • 2021-11-24
  • 2022-12-23
  • 2022-12-23
  • 2022-01-09
猜你喜欢
  • 2021-05-02
  • 2021-10-31
  • 2022-02-08
  • 2021-07-23
  • 2022-12-23
相关资源
相似解决方案