首页 > 代码库 > 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

数据结构上机测试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 <iostream>#include <string>#include <cstdio>#include <string.h>#include <algorithm>#include <ctype.h>using namespace std;struct node{    int data;    struct node *next;};struct node *nicreat(int n) //逆序创建链表{    int i;    struct node *head, *p;    head = new node;    head->next = NULL;    for(i=0; i<n; i++)    {        p=new node;        cin>>p->data;        p->next=head->next;        head->next=p;    }    return head;}int main(){    int n;    cin>>n;    int i, j;    int len;    struct node *head, *w, *q;    struct node *h1, *p, *tail, *dd;    head=nicreat(n);    cout<<n<<endl;    w=head->next;    for(i=0; i<n; i++)    {        if(i==0)          cout<<w->data;        else          cout<<" "<<w->data;        w=w->next;    }    cout<<endl;//删除重复元素,重复的保留最前面的    h1=new node;    h1->next=NULL;    tail=h1;    len=0;    w=head->next;    delete(head);    for(i=0; i<n; i++)    {        if(h1->next==NULL) //此时链表为空        {            p=new node;            p->data = http://www.mamicode.com/w->data;" "<<w->data;        w=w->next;    }    cout<<endl;    return 0;}

 

数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)