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

来源:互联网 发布:舒缦水暖床垫淘宝网 编辑:程序博客网 时间:2024/06/03 14:29

提交代码

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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss

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

Author

不得使用数组!
#include <iostream>using namespace std;struct node{int num;node *next;};void display(struct node *head){while(head!=NULL){if(head->next!=NULL)cout<<head->num<<' ';elsecout<<head->num<<endl;head=head->next;}}void Delete(struct node *head,int n){node *p,*p1,*p2;p=head;while(p->next!=NULL)//刚遍历到最后一个节点时就结束,不对最后一个节点进行判断(因为在前面判断出 前面的节点值和最后一个节点值都不想等){p1=p;//p1作为索引,在遇到与p相等的值的时候,删除相等的节点p2=p->next;//由p后面的一个值开始进行遍历while(p2!=NULL)//后面的值不为空节点时进行循环{if(p->num==p2->num)//在while(p2!=NULL)循环中p->num的保持不变{p1->next=p2->next;//遇到相等的值的时候索引p1的值开始发生作用p2=p2->next;//删除节点n--;}else{p1=p1->next;//遇到不想等的时候,P1也要跟随变化,用于在遇到相等的时候发生作用p2=p2->next;}}p=p->next;//对下一个值进行判断}cout<<n<<endl;display(head);}void create_list(struct node *head,int n){node *p,*q;//head=new node;head->next=NULL;for(int i=0;i<n;i++){p=new node;cin>>p->num;p->next=head->next;head->next=p;//从头节点入手,进行中间插入,head->num并没有值}cout<<n<<endl;display(head->next);}int main(){node *head;head=new node;int n;cin>>n;create_list(head,n);Delete(head->next,n);return 0;}
下面的段代码一直Runtime Error
#include <iostream>using namespace std;struct node{int num;node *next;};void display(struct node *head){while(head!=NULL){if(head->next!=NULL)cout<<head->num<<' ';elsecout<<head->num<<endl;head=head->next;}}struct node *Delete(struct node *head,int n){node *p,*p1,*p2;p=head;while(p->next!=NULL)//刚遍历到最后一个节点时就结束,不对最后一个节点进行判断(因为在前面判断出 前面的节点值和最后一个节点值都不想等){p1=p;//p1作为索引,在遇到与p相等的值的时候,删除相等的节点p2=p->next;//由p后面的一个值开始进行遍历while(p2!=NULL)//后面的值不为空节点时进行循环{if(p->num==p2->num)//在while(p2!=NULL)循环中p->num的保持不变{p1->next=p2->next;//遇到相等的值的时候索引p1的值开始发生作用p2=p2->next;//删除节点n--;}else{p1=p1->next;//遇到不想等的时候,P1也要跟随变化,用于在遇到相等的时候发生作用p2=p2->next;}}p=p->next;//对下一个值进行判断}cout<<n<<endl;return head;}struct node *create_list(struct node *head,int n){node *p,*q;head->next=NULL;for(int i=0;i<n;i++){p=new node;cin>>p->num;p->next=head->next;head->next=p;}return head;}int main(){node *head;head=new node;int n;cin>>n;create_list(head,n);cout<<n<<endl;display(head->next);Delete(head->next,n);display(head->next);return 0;}


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