链表去重操作-两种方法的实现

来源:互联网 发布:新加坡航空 知乎 编辑:程序博客网 时间:2024/05/29 12:24
#include<stdio.h>#include<stdlib.h>typedef struct list{    int data;    list *next;}List;void create_list(list *&head,int len){    list *p=head;    for(int i=0;i<len;i++)    {        list *pnew=(list*)malloc(sizeof(list));        scanf("%d",&pnew->data);        p->next=pnew;        p=p->next;    }    p->next=NULL;}void print_list(list *head){    while(head->next!=NULL)    {        head=head->next;        printf("%d ",head->data);    }}void delete_list(list *head,list *tail,list *newList){    list *o,*p,*q,*r=head,*t=newList;    int l=0;    for(p=head->next;p!=NULL;)    {        l=0;        for(q=p->next;q!=NULL;q=q->next)        {            if(p->data==q->data)            {                l=1;                o=p;                r->next=p->next;                p=p->next;                free(o);                break;            }        }        if(!l)        {            r=p;            p=p->next;        }        /*if(!l)        {            t->next=p;            t=t->next;        }*/    }    t->next=NULL;}int main(){    list l;    int len;    scanf("%d",&len);    list *newList=(list *)malloc(sizeof(list)),*tail=(list *)malloc(sizeof(list)),*head=(list *)malloc(sizeof(list));    create_list(head,len);    tail=head;    delete_list(head,tail,newList);    //print_list(newList);    print_list(head);    return 0;}
一种是新建链表,另一种直接在原来链表进行删除
0 0