已知一个带有表头结点的单链表,结点结构为 data link 假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的 算法,查找链表中倒数第k个位置
数据结构算法题—单链表01题分析: 这是一个单链表算法题,题中说要在不改变链表本身的前提下,设计一个尽可能高效的算法,说明时间复杂度、空间复杂度都要尽可能地高效,常数也要尽可能小。思路: 设置两个指针p和q,指p针在指针q后k个位置上,当q遍历至尾部时,p刚好遍历到了倒数第k个位置上。图解如下:...
·

分析: 这是一个单链表算法题,题中说要在不改变链表本身的前提下,设计一个尽可能高效的算法,说明时间复杂度、空间复杂度都要尽可能地高效,常数也要尽可能小。
思路: 设置两个指针p和q,指p针在指针q后k个位置上,当q遍历至尾部时,p刚好遍历到了倒数第k个位置上。
图解如下:
代码实现如下:
typedef struct LNode{
int data;
LNode *next;
}LinkList,LNode;
int search(LinkList *list,int k)
{
LNode *p=list->next;
LNode *q=list->next;//使p、q初始时指向头结点
int count=0;
while(q!=NULL)
{
if(count<k)
{
count++;
}
else
{
p=p->next;//当count值大于时,指针p开始和q同步移动
}
q=q->next;
}
if(count<k)
{
return 0;//查找失败
}else
{
cout<<p->data;//查找成功则返回data指;
return 1;
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)