已知一个带有表头结点的单链表, 假设链表只给出了头指针L。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。 函数原型为:int lnk_search(LinkList L, int k, ElemType* p_ele) 若查找成功,函数通过指针参数 p_ele 返回该结点 data 域的值,此时函数返回 1;否则,函数返回 0。相关定义如下: struct _lnklist{ ElemType data; struct _lnklist *next; }; typedef struct _lnklist Node; typedef struct _lnklist *LinkList;
时间: 2023-03-30 07:00:54 浏览: 163
3-2 试编写一个算法,在带表头结点的单链表中寻找第i个结点.doc
可以回答这个问题。这是一个经典的链表问题,可以使用双指针法来解决。具体实现如下:
int lnk_search(LinkList L, int k, ElemType* p_ele) {
if (L == NULL || k <= ) {
return ;
}
Node *p = L, *q = L;
int i;
for (i = ; i < k && p != NULL; i++) {
p = p->next;
}
if (i < k) {
return ;
}
while (p != NULL) {
p = p->next;
q = q->next;
}
*p_ele = q->data;
return 1;
}
这个算法的时间复杂度为 O(n),其中 n 是链表的长度。
阅读全文