OOP链表的有序集合(指针+链表结构)

题目描述

集合有一个重要的特性:互异性,即集合中任意两个元素都是不同的,互异性使得集合中的元素没有重复。给你 n 个包含重复数字的无序正整数序列,建立一个有序链表,链表中的结点按照数值非降序排列且不包含重复元素,输出该有序链表。

输入

输入包含多组测试数据,对于每组测试数据:

输入的第一行为一个正整数 n(1 ≤ n ≤ 100),

第二行为 n 个正整数 b1,b2,...,bn(0 ≤ bi ≤ 2^30)。

输出

对于每组测试数据,按照非降序输出链表的节点值。

样例

输入:

1
2
2
1 1
6
6 3 5 2 2 3
输出:

2
1
2 3 5 6

#include<iostream>
#include<stdio.h>
using namespace std;

struct Node {
	int x;
	Node* next;
};
Node* creat(Node* head, int n);
void sort(Node* head);
void print(Node* head);
int main()
{
	int n;
	while (cin>>n)//输入多组数据
	{
		Node* head = new Node;
		head->x = n;
		head->next = NULL;
		head = creat(head, n);
		sort(head);
		sort(head);
		print(head);
	}
	return 0;
}
Node* creat(Node* head, int n)
{
	int i, m;
	Node* p = new Node;
	p = head;
	for (i = 0; i < n; i++)
	{
		cin >> m;
		Node* q = new Node;
		q->x = m;
		q->next = NULL;
		p->next = q;
		p = p->next;
	}
	return head;
}
void sort(Node* head)
{
	int i,j,m;
	Node *temp1=new Node;
	temp1 = head;
	Node* p = new Node;
	p = head;
	Node* q = new Node;
	q = head;
	for (i = 0; i < head->x-1; i++)
	{
		temp1 = temp1->next;
		p = temp1;
		q = temp1;
		for (j = i + 1; j < head->x; j++)
		{
			if (p->x == q->next->x) {
				Node* m = new Node;
				m = q->next;
				q->next= m->next;
				head->x--; 
				delete m;
				continue;
			}
			q = q->next;
			if (p->x > q->x) {
				m = p->x;
				p->x = q->x;
				q ->x= m;
			}
		}	
	}	
}
void print(Node* head)
{
	int i;
	Node* p = head;
	for (i = 1; i <head->x; i++)
	{
		p = p->next;
		cout << p->x << " ";
	}
    p=p->next;
	cout <<p->x<< endl;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值