Problem Description
Input
第二行输入n个整数。
Output
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。
Example Input
10
21 30 14 55 32 63 11 30 55 30
Example Output
10 30 55 30 11 63 32 55 14 30 21 730 55 11 63 32 14 21
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }*head,*p,*q; void print(struct node *h) { p=h->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } } struct node *create(int n) { int i; head=(struct node *)malloc(sizeof(struct node)); head->next=NULL; for(i=1;i<=n;i++) { p=(struct node *)malloc(sizeof(struct node)); p->next=NULL; scanf("%d",&p->data); p->next=head->next; head->next=p; } return head; } void num(struct node *h) { int k=0; while(h!=NULL) { k++; } printf("%d\n",k); } void del(struct node *h,int n) { struct node *t; p=head->next; while(p!=NULL) { q=p; t=p->next; while(t!=NULL) { if(p->data==t->data) { q->next=t->next; t=t->next; n--; } else { t=t->next; q=q->next; }
} p=p->next;
}
return head; } int main() { int n; struct node *h; scanf("%d",&n); h=create(n); printf("%d\n",n); print(h); printf("\n"); del(h,n); num(h); print(h); return 0; }
#include <stdio.h> #include <stdlib.h> struct node { int a; struct node *next; }*p,*q,*t,*head; int main() { int i,j,k,n,m,l; scanf("%d",&n); head=(struct node *)malloc(sizeof(struct node)); head->next=NULL; for(i=1;i<=n;i++) { p=(struct node *)malloc(sizeof(struct node)); scanf("%d",&p->a); p->next=head->next; head->next=p; } p=head->next; printf("%d\n",n); for(i=1;i<=n;i++) { if(p->next==NULL) printf("%d\n",p->a); else printf("%d ",p->a); p=p->next; } p=head->next; while(p->next!=NULL) { q=p; t=p->next; while(t!=NULL) { if(p->a==t->a) { q->next=t->next; t=t->next; n--; } else{ q=q->next; t=t->next; } } p=p->next; } p=head->next; printf("%d\n",n); while(p!=NULL) { if(p->next==NULL) printf("%d\n",p->a); else printf("%d ",p->a); p=p->next; } return 0; }
这篇博客介绍了如何在单链表数据结构中删除重复的元素。通过问题描述、输入和输出的示例,详细解释了操作过程。
2214

被折叠的 条评论
为什么被折叠?



