数据结构实验之链表七:单链表中重复元素的删除

来源:互联网 发布:身份证登记软件下载 编辑:程序博客网 时间:2024/05/17 14:17
Problem Description按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。Input第一行输入元素个数 n (1 <= n <= 15);第二行输入 n 个整数,保证在 int 范围内。Output第一行输出初始链表元素个数;第二行输出按照逆位序所建立的初始链表;第三行输出删除重复元素后的单链表元素个数;第四行输出删除重复元素后的单链表。Example Input1021 30 14 55 32 63 11 30 55 30Example Output1030 55 30 11 63 32 55 14 30 21730 55 11 63 32 14 21Hint


#include<stdio.h>#include<stdlib.h>struct node{int data;struct node *next;};void del(struct node *head,int n){int i,count=0;struct node *p,*q,*r;p=head->next;q=p;while(p){while(q->next){if(p->data == q->next->data){r=q->next;q->next=r->next;free(r);count++;}elseq=q->next;}p=p->next;q=p;}printf("%d\n",n-count);head=head->next;for(i=0;i<n-count;i++){printf("%d",head->data);if(i==n-count-1)printf("\n");elseprintf(" ");head=head->next;}}int main(){struct node *head,*p,*q;int i,n;head = (struct node*)malloc(sizeof(struct node));head->next=NULL;q=head;scanf("%d",&n);for(i=1;i<=n;i++){p=(struct node*)malloc(sizeof(struct node));scanf("%d",&p->data);p->next=head->next;head->next=p;}printf("%d\n",n);q=q->next;for(i=0;i<n;i++){printf("%d",q->data);if(i==n-1)printf("\n");elseprintf(" ");q=q->next;}del(head,n);return 0;}


阅读全文
0 0
原创粉丝点击