求一个单链表的倒数第k个结点
思路:
1.首先要求倒数第k个结点,可以想到这个结点就是从单链表的NULL位置往前走k个结点
2.显然一个指针是无法实现的,所以需要定义两个指针,当其中一个指针走到链表的NULL位置时,只需要让另一个指针与这个指针相差k个结点的位置即可达成目的。
3.一开始的指针都定义在头结点的位置,让其中一个指针先走k次,然后两个指针开始同步走,直到先走的那个指针到达NULL位置时停止,而此时后出发k次的指针所指向的结点便是我们需要得到的倒数第k个结点的位置。
具体实现找到单链表中倒数第k个结点的代码如下:
typedef struct Node
{
int data;
struct Node *next
}HeadList;
Node *Findk(HeadList *head)
{
HeadList *p = head;
HeadList *q = head;
while(k)
{
p = p->next;
k--;
}
while(p != NULL)
{
p = p->next;
q = q->next;
}
return q;
}