連結串列去重操作-兩種方法的實現
阿新 • • 發佈:2019-01-10
一種是新建連結串列,另一種直接在原來連結串列進行刪除#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; }