数据结构上机测试2-2:单链表操作B

来源:互联网 发布:第一财经商业数据 编辑:程序博客网 时间:2024/05/19 13:19

数据结构上机测试2-2:单链表操作B

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

输入

第一行输入元素个数n;
第二行输入n个整数。

输出

第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。

示例输入

1021 30 14 55 32 63 11 30 55 30

示例输出

1030 55 30 11 63 32 55 14 30 21730 55 11 63 32 14 21


#include<stdio.h>  #include<stdlib.h>  struct node  {      int data;      struct node *next;  };  struct node * inset(struct node *head,int n)  {      int i;      struct node *p,*q,*tail;      for(i=0;i<n;i++)      {          p=(struct node *)malloc(sizeof(struct node));          scanf("%d",&p->data);          p->next=head->next;          head->next=p;      }      return(head);  }  int main()  {      int i,j,n,m,k=0;      struct node *head,*p,*q,*tail;      scanf("%d",&n);      head=(struct node *)malloc(sizeof(struct node));      head->next=NULL;      head=inset(head,n);      p=head;      p=p->next;      printf("%d\n",n);      for(i=0;i<n;i++)      {          if(i==0)          printf("%d",p->data);          else              printf(" %d",p->data);          p=p->next;      }      printf("\n");      p=head->next;      head->next=NULL;  for(i=0;i<n;i++)  {      tail=p->next;      q=head;  for(j=0;j<k;j++)  {      if(q->next->data==p->data)      {          free(p);      break;      }      q=q->next;  }  if(q->next==NULL)  {      k++;  p->next=q->next;  q->next=p;  }  p=tail;  }      printf("%d\n",k);      p=head;      p=p->next;      for(i=0;i<k;i++)      {          if(i==0)          printf("%d",p->data);          else              printf(" %d",p->data);          p=p->next;      }      printf("\n");  } 


0 0