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

来源:互联网 发布:apache bin httpd.exe 编辑:程序博客网 时间:2024/05/19 22:55

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

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

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

Input

第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。

Output

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

Example Input

1021 30 14 55 32 63 11 30 55 30

Example Output

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

Hint

不得使用数组! 
#include <bits/stdc++.h>using namespace std;typedef struct node{    int date;    struct node *next;}Lnode;Lnode *creat(int n)    //建表 输入{    Lnode *head, *p;    head = new node;    head -> next = NULL;    while(n--)    {        p = new node;        p ->next = NULL;        cin >> p->date;        p ->next = head ->next;        head ->next = p;    }    return head;}Lnode *del(Lnode *head, int n )  // 删除重复元素{    Lnode *p, *q, *r;    p=head->next;    q=p;    while(p)    {        while(q->next)        {            if(p->date==q->next->date)//用q->next方便删除重复元素            {                r=q->next;                q->next=r->next;                free(r);                n--;            }            else            {                q=q->next;            }        }        p=p->next;        q=p;    }    cout << n <<endl;    //输出删除后的总元素和    return head;}void output(Lnode *head)    //输出当前表内元素{    Lnode *q;    cout << head -> next ->date;    q = head ->next;    while(q->next)    {        cout << " " << q ->next ->date;        q = q->next;    }    cout << endl;}int main(){    Lnode *head;    int n;    cin >> n;    head = creat(n);    //建表    cout << n << endl;  //总元素和    output(head);       //第一次输出当前元素    head = del(head,n); //删除重复元素    output(head);       //输出删除后元素    return 0;}

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