题目如下:
Description
对输入的正整数序列建立有序单链表。在建立单链表的过程中,链表中的数据元素按升序排列。当输入的数据元素在单链表中已经存在时,不进行插入操作。
请使用面向对象形式定义结点类和链表类,参考代码如下。
class Node
{
int data;
Node* next;
...
friend class LinkList; //声明友元类,以便在LinkList类中可以访问Node类的私有成员。
};
class LinkList
{
Node* head;
int size;
public:
....
};
Input
每行一个正整数,当输入-1时结束。
Output
将建立好的升序单链表所有元素按从小到大的顺序依次输出。
Sample Input
100 50 200 150 75 10 300 200 100 400 -1
Sample Output
10 50 75 100 150 200 300 400
解答如下:
#include <iostream>
using
namespace
std;
class
Node //声明节点类
{
int
data;
Node* next;
friend
class
LinkList;
//声明友元类,以便在LinkList类中可以访问Node类的私有成员。
public
:
Node(
int
num) : data(num), next(NULL) {}; //构造函数
};
class
LinkList //声明链表类
{
Node* head;
int
size;
public
:
LinkList() : head(NULL), size(0) {};
void
insert(
int
num)
{
Node* p =
new
Node(num);
if
(!head || p->data < head->data)
{
p->next = head;
head = p;
}
else
{
Node* index = head;
while
(index->next != NULL && p->data > index->next->data)
{
index = index->next;
}
if
(index->next == NULL || p->data != index->next->data)
{
p->next = index->next;
index->next = p;
}
}
}
void
print()
{
Node* index = head;
while
(index != NULL)
{
cout << index->data << endl;
index = index->next;
}
}
};
int
main()
{
LinkList l;
int
num;
cin >> num;
while
(num != -1)
{
l.insert(num);
cin >> num;
}
l.print();
return
0;
}