oj2204——使链表中不存在相同元素

来源:互联网 发布:域名证书有什么用 编辑:程序博客网 时间:2024/06/08 02:57
问题描述:删除链表中相同数据
作者:何知令

完成时间: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;}
程序运行结果展示:

知识点总结:数据结构,结构体

学习心得:开始各种懵逼,现在也开始会了

0 0
原创粉丝点击