删除链表重复元素(三种方法)
·
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkList;
void InputList(LinkList L);//输出
LinkList CreatList(int n)//创建链表 头插法
{
LinkList p,L;
int data,i;//用于输入数据
L = (LinkList)malloc(sizeof(LNode));//头节点
L->next = NULL;
printf("请输入数据:\n");
for(i = n;i > 0;--i)
{
p = (LinkList)malloc(sizeof(LNode));//生成新节点
scanf("%d",&p->data);
p -> next = L -> next;
L-> next = p;
}
return L;
}
void DeleoneList(LinkList L)//删除方法一 :遍历原链表,建立新链表,如果有相同,则不加入,如果没有,则加入
{
printf("第一种删除方法:\n");
LinkList head,p,q,r,m;//建立新链表
head = (LinkList)malloc(sizeof(LNode));//新链表头节点
head ->next = NULL;
q = head;
p = L->next;
int flag = 0;
// InputList(q);//输出结果
while(p!=NULL)
{
for(m = head->next;m!=NULL;m=m->next)
{
if(p->data==m->data)
{
flag = 1;
break;
}
}
if(flag==0)//可以插入新数据
{
r = (LinkList)malloc(sizeof(LNode));
r->data = p->data;
r->next = q->next;
q->next = r;
}
// InputList(q);//输出结果
flag = 0;
p = p->next;//下一个数据
}
printf("结果如下:");
InputList(q);//输出结果
}
void DeletwoList(LinkList L)//删除方法二:进行双重循环遍历,外循环当前遍历的结点为cur,内循环从cur开始遍历,相同则删除
{
printf("第二种删除方法:\n");
LinkList p,q,r,m;
p = L->next;
while(p!=NULL)
{
q = p;
while(q->next!=NULL)
{
if(p->data==q->next->data)//删除q这个节点
{
q->next = q->next->next;//删除q->next这个节点
}
else
{
q = q->next;
}
}
p = p->next;
}
printf("结果如下:");
InputList(L);//输出结果
}
void sort(LinkList L) //排序
{
LinkList p,q;
int temp;
for(p=L->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}
void DelethreeList(LinkList L)//先排序,和前一个元素比较,相同就下一个,不同就直接删除
{
printf("第三种删除方法:\n") ;
sort(L);
LinkList p,q;
p = L->next;
while(p->next!=NULL)
{
if(p->data==p->next->data)
{
p -> next = p->next->next;
}
else
{
p = p->next;
}
}
printf("结果如下:");
InputList(L);//输出结果
}
void InputList(LinkList L)//输出链表
{
LinkList p;
p = L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int n;
printf("请输入节点个数:\n");
scanf("%d",&n);
LinkList L = CreatList(n);//创建链表
DeleoneList(L);//第一种删除方法
// DeletwoList(L);//第二种删除方法
// DelethreeList(L);//第三种删除方法
return 0;
}
推荐内容
阅读全文
AI总结
更多推荐
相关推荐
查看更多
DeepSeek-V3-0324

DeepSeek最新推出DeepSeek-V3-0324版本,参数量从6710亿增加到6850亿,在数学推理、代码生成能力以及长上下文理解能力方面直线飙升。
Open-Sora

Open-Sora:为所有人实现高效视频制作
Python

All Algorithms implemented in Python
热门开源项目
活动日历
查看更多
直播时间 2025-04-07 14:51:20

樱花限定季|G-Star校园行&华中农业大学专场
直播时间 2025-03-26 14:30:09

开源工业物联实战!
直播时间 2025-03-25 14:30:17

Heygem.ai数字人超4000颗星火燎原!
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
直播时间 2025-03-11 18:35:18

从0到1:Go IoT 开发平台的架构演进与生态蓝图
所有评论(0)