输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
解题思路:定义两个指针,一个指针先走K-1步另一个指针再开始走,当第一个指针走到最后一个位置时,就找到了第K个节点
假如要找倒数第4个节点,就定义一个指针先走步,如图P为先走的指针,当P走到第K-1步时,第二个指针开始走,当P走到最后一个节点时,就找到了倒数第四个节点
具体代码实现:
typedef struct PNode
{
int data;
PNode * next;
}Node;
Node * Search(Node *head,int key)
{
if(head == nullptr || key == 0)
{
return nullptr;
}
Node * p = haed;
Node * q = head;
for(int i = 0;i < key;i++)
{
if(p->next != NULL)
{
p = p->next;
}
else
return nullptr;
}
while(p->next != NULL)
{
p = p->next;
q = q->next;
}
return q;
}