问题描述:删除链表中相同数据
作者:何知令
作者:何知令
完成时间:2017年4月25日
代码:
/*
问题描述:删除链表中相同数据
作者:何知令
完成时间:2017年4月25日
*/
#include <stdio.h>
#include <stdlib.h>
int a[10000];
typedef int ElemType;
typedef struct LNode//单链表结构体
{
ElemType data;
struct LNode *next;
} LinkList;
void IinitList(LinkList *L)//创建单链表的表头
{
L->next=NULL;
}
void InitList(LinkList *L)
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
void CreateList(LinkList *L,ElemType a[],int n)//初始化单链表
{
LinkList *s,*r;
int i;
r=L;
for(i=0; i<n; i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void DispList(LinkList *L)//遍历单链表,输出其上每一个元素
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int DeleteList(LinkList *L)//删除相同元素
{
LinkList *q=L->next,*p,*k;//p和q均指向第一节点
while(q!=NULL&&q->next!=NULL)
{
p=q;//对p指针重新赋值将其指向q指针指向的下一个数据
while(p!=NULL&&p->next!=NULL)
{
if(q->data==p->next->data)//q指向的当前节点数据与p指向的当前节点数据相同时执行删除操作
{
k=p->next;//设置一指针指向该位置
p->next=k->next;//指针转移
free(k);//删除操作
}
else
p=p->next;//访问下一字符
}
q=q->next;
}
return 1;
}
int main()
{
int i;
int n;
LinkList L;
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
IinitList(&L);
CreateList(&L,a,n);
if(DeleteList(&L))
DispList(&L);
return 0;
}
程序运行结果展示:
知识点总结:数据结构,结构体
学习心得:开始各种懵逼,现在也开始会了