c语⾔——删除单链表中的重复元素适应类型:删除的元素不相邻。
每次都需要从 链表头 遍历到 链表尾,去寻重复元素。
⽤双层循环去实现,外层循环遍历链表,内层循环将 当前结点的值 与 剩余的所有结点的值 ⽐较
如果有相同的就删除
同时 把删除结点的 前 后 两个节点连接起来。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct NUM {//定义⼀个结构体
int num;
struct NUM* pNext;
} num, * pnum;
//该⼦函数是尾插法
void insert(pnum* phead, pnum* ptail, int Input) {
pnum pnew = (pnum)calloc(sizeof(num), 1);
memset(pnew, 0, sizeof(num));
pnew->num = Input;
if (NULL == *phead) { //判断链表是否为空
//如果链表为空
*phead = pnew;
*ptail = pnew;
}
else {
(*ptail)->pNext = pnew;
*ptail = pnew;
}
}
//打印链表
void printList(pnum phead) {
pnum pcur = phead;
while (pcur) {
printf("%d ",pcur->num);
pcur=pcur->pNext;
}
printf("\n");
}
int main() {
pnum phead = NULL;
pnum ptail = NULL;
pnum pre = NULL;//存储第⼀个结点地址
pnum pcur = NULL;//存储当前结点地址
pnum pcur = NULL;//存储当前结点地址
pnum next = NULL;//存储下⼀个结点地址
//pnum q;
int InPut;//定义要输⼊的数
while (scanf_s("%d", &InPut) != EOF) {//读取要输⼊的数字
insert(&phead, &ptail, InPut);//调⽤⼦函数在⼦函数中具体实现功能 }
pcur = phead;
c语言listinsert函数while (pcur) {
pre = pcur;
next = pcur->pNext;//结构体得到下⼀个结点
while (next) {
if (pcur->num == next->num) {
pre->pNext = next->pNext;
}
else {
pre = next;
}
next = next->pNext;
}
pcur = pcur->pNext;
}
printList(phead);
return 0;
}
运⾏结果:
重复的元素是 2 ,因此 删除⼀个2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论