链表-查找链表倒数第k个节点
2020-03-05 本文已影响0人
茶还是咖啡
给定一个链表,返回链表倒数第k个节点的值。
eg:
1->2->3->4->5
k=3,则倒数第k个节点的值为2。
思路:
我们需要两个指针,第一个指针先走k个节点,然后同步移动,直到前面的指针走到链表的最后一个节点(NULL),那么后面的那个指针指向的节点即为倒数第k个节点。
这个题需要注意的点是链表的长度不足k的时候,不再查找程序直接进行返回。

code
返回-1代表链表非法
int findKey(ElemSN *head,int key){
if(head==NULL||key<=0){
return -1;
}
ElemSN *p = head,*q = head;
int loop = 0;
while (loop<key&&p!=NULL) {
loop++;
p = p->next;
}
while (p!=NULL) {
p=p->next;
q=q->next;
}
if(loop==key){
return q->data;
}
return -1;
}