关闭

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

160人阅读 评论(0) 收藏 举报
分类:

题目描述

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

输入

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

输出

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

示例输入

10
21 30 14 55 32 63 11 30 55 30

示例输出

10
30 55 30 11 63 32 55 14 30 21
7

30 55 11 63 32 14 21

#include <iostream> #include<bits/stdc++.h> using namespace std; struct node {     int data;     node *next; }; struct node *create(int n) {     int i;     node *head,*p;     head=new node;     head->next=NULL;     for(i=0;i<n;i++)     {         p=new node;         scanf("%d",&p->data);         p->next=head->next;         head->next=p;     }     return (head); }; void print(struct node *p) {     struct node *h=p->next;     while(h!=NULL)     {         if(h->next==NULL)         printf("%d",h->data);         else         printf("%d ",h->data);         h=h->next;     } } void num(node *head) {     int i=0;    node *p=head->next;     while(p)     {         i++;         p=p->next;     }    printf("%d\n",i); } void del(node *p)//删除重复元素; {    node *h;    h=p->next;    node *q,*t;     while(h)     {         q=h;         while(q->next)         {             if(h->data==q->next->data)             {                 t=q->next;                 q->next=t->next;                 free(t);             }             else                 q=q->next;         }         h=h->next;     } } int main() {    int n;    scanf("%d",&n);    node *p=create(n);    num(p);    print(p);    printf("\n");    del(p);    num(p);    print(p);     return 0; }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42917次
    • 积分:2718
    • 等级:
    • 排名:第13256名
    • 原创:227篇
    • 转载:71篇
    • 译文:0篇
    • 评论:15条
    最新评论