求助c语言高手指点,单向链表删除重复结点的详细解答,希望有完整的程序和语句的注释,小弟初学,多谢啦~
环境设定:结构体定义为:structNode{intnum;structNode*next;}主函数通过调用voiddubdel(structNode*head)这个函数...
环境设定:
结构体定义为:
struct Node
{
int num;
struct Node *next;
}
主函数通过调用void dubdel(struct Node*head)这个函数删除head所指结点为链头的单向链表中的重复结点。重复的定义就是num的值相同,删除时,保留离链头最近的结点。
麻烦各位高手注解详细些,小弟初学,怕看不懂,多谢啦~~O(∩_∩)O~ 展开
结构体定义为:
struct Node
{
int num;
struct Node *next;
}
主函数通过调用void dubdel(struct Node*head)这个函数删除head所指结点为链头的单向链表中的重复结点。重复的定义就是num的值相同,删除时,保留离链头最近的结点。
麻烦各位高手注解详细些,小弟初学,怕看不懂,多谢啦~~O(∩_∩)O~ 展开
1个回答
展开全部
具体代码如下,已经添加注释
#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; //查找完成则向后移动
}
}
#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; //查找完成则向后移动
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |