[每日一题]:4.有一张单链表,编写函数求倒数第K个节点(要求只能遍历一次链表)

题目:
有一张单链表,编写函数求倒数第K个节点(要求只能遍历一次链表)

思路:
为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针:

  1. 第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;
  2. 从第k步开始,第二个指针也开始从链表的头指针开始遍历;
  3. 由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。

代码如下:

 ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
//刚开始的时候,都指向起点,然后p1走k-1步后,p2和p1同时开始走,当p1走到最后一个的时候,p2指向的就是 最后一个节点
    ListNode *p1 = pListHead;
    ListNode *p2 = pListHead;
    if(pListHead==NULL || k == 0) {
        return NULL;
    }
    while( k-1 > 0)
    {
        if(p1->next != NULL)
        {
            p1 = p1->next;
			--k; 
		}
		else
        {
            cout<<"error"<<endl;
            return  NULL;
		} 
	}
    while(p1->next != NULL)
    {
        p1 = p1->next;
        p2 = p2->next;
    }
	return p2; 
}
发布了92 篇原创文章 · 获赞 32 · 访问量 4661

猜你喜欢

转载自blog.csdn.net/AngelDg/article/details/104176619