【发布时间】:2013-04-28 19:25:37
【问题描述】:
我正在尝试使用 C 程序从排序链表中删除重复项,并且我正在使用从起始节点遍历列表的简单概念。遍历时,将每个节点与其下一个节点进行比较。如果下一个节点的数据与当前节点相同,则删除下一个节点。
我的代码是:
struct node *remove_dup(struct node *start)
{
struct node *p,*tmp;
p=start;
while(p!=NULL)
{
if(p->info==p->link->info)
{
tmp=p->link;
p->link=p->link->link;
free(tmp);
}
p=p->link;
}
return start;
}
它没有给我正确的答案!我的执行有什么问题?我的概念错了吗?
【问题讨论】:
-
什么是输入不产生正确结果的例子?
-
p = p->link;语句需要进入else分支。 -
您遇到任何错误吗?
-
是的,我意识到列表是排序的,在发布之后。因此删除了我的评论:)
-
逐行遍历代码,每一行之后,查看链表。在某些时候,列表将不正确。这就是错误所在。
标签: c algorithm singly-linked-list