编程论坛
注册
登录
编程论坛
→
数据结构与算法
请高手帮我看看这道题 谢谢
发布于 2010-05-02 15:00, 537 次点击
已知一个带有表头结点的单链表,结点结构为 data link 假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。
2 回复
#2
2010-05-02 16:15
这个恐怕没有多好的方法,时间复杂度只能保持为O(n)。具体做法,就是遍历一遍链表,求出链表长度,然后从头找第k个,假设ElemType为data类型。
具体算法如下:
ElemType List_visit(LinkList L,int k)
{
LinkList r;int i;
i=1;r=L->link;
while(r->next) { r=r->link; i++; }
if(i<k) return 0;
else
{
r=L->next;i=1;
while(i<k) { r=r->next; i++; }
}
return r->data;
}
按位序查找单链表里的某个数据,一般没有什么好的算法,书上说顺序表的优势就是可以快速存取数据,反过来不就是链表办不到嘛。。。
#3
hzh512
2010-05-08 18:26
在表头结点添加节点总数信息并且将单链表变成循环单链表,复杂度为 O(1).因为k为常数
1