数据结构与算法整理

链表-查找链表倒数第k个节点

2020-03-05  本文已影响0人  茶还是咖啡

给定一个链表,返回链表倒数第k个节点的值。

eg:
1->2->3->4->5
k=3,则倒数第k个节点的值为2。

思路:

我们需要两个指针,第一个指针先走k个节点,然后同步移动,直到前面的指针走到链表的最后一个节点(NULL),那么后面的那个指针指向的节点即为倒数第k个节点。

这个题需要注意的点是链表的长度不足k的时候,不再查找程序直接进行返回。

image.png

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;
}

上一篇 下一篇

猜你喜欢

热点阅读