求助c语言高手指点,单向链表删除重复结点的详细解答,希望有完整的程序和语句的注释,小弟初学,多谢啦~

环境设定:结构体定义为:structNode{intnum;structNode*next;}主函数通过调用voiddubdel(structNode*head)这个函数... 环境设定:

结构体定义为:
struct Node
{
int num;
struct Node *next;
}

主函数通过调用void dubdel(struct Node*head)这个函数删除head所指结点为链头的单向链表中的重复结点。重复的定义就是num的值相同,删除时,保留离链头最近的结点。

麻烦各位高手注解详细些,小弟初学,怕看不懂,多谢啦~~O(∩_∩)O~
展开
 我来答
Soucula
推荐于2017-11-28 · TA获得超过3091个赞
知道小有建树答主
回答量:744
采纳率:93%
帮助的人:62.7万
展开全部
具体代码如下,已经添加注释
#include <stdio.h>

struct Node
{
int num;
struct Node *next;
};

void dubdel(struct Node *head)
{
struct Node *cur = head; //用于遍历整个链表
struct Node *find = NULL; //用于查找与cur相同的结点
while(cur != NULL)
{
find = cur;
while (find->next != NULL) //从cur的下一个结点开始比较
{
if (find->next->num != cur->num) //不相等继续查找是否有与cur相同的结点
find = find->next;
else { //相等则删除该结点
struct Node *tmp;
tmp = find->next; //tmp指向与cur相等的结点
find->next = find->next->next; //将结点从链表中剔除
free(tmp); //释放该结点
}
}
cur = cur->next; //查找完成则向后移动
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式