**
实验题目
**
对输入的正整数序列建立有序单链表。在建立单链表的过程中,链表中的数据元素按升序排列。当输入的数据元素在单链表中已经存在时,不进行插入操作。
请使用面向对象形式定义结点类和链表类,参考代码如下。
class Node
{
int data;
Node* next;
friend class LinkList; //声明友元类,以便在LinkList类中可以访问Node类的私有成员。
};
class LinkList
{
Node* head;
int size;
public:
…
};
代码如下:
#include<iostream>
using namespace std;
class Node
{
int data;
Node* next;
friend class LinkList;
};
class LinkList
{
Node* head;
int size;
public:
LinkList() {
head = new Node;
head->next = NULL;
size = 0;
}
void addNode(int x) { //加入节点
Node *p, *q;
p = head;
while (1) {
if (p->next == NULL) { //最后一位情况
q = new Node;
q->next = p->next;
q->data = x;
p->next = q;
size++;
break;
}
if (p->next->data == x) //去重
break;
if (p->next->data < x) { //后续节点比x小
p = p->next;
continue;
}
q = new Node; //后续节点比x大,满足升序
q->next = p->next;
q->data = x;
p->next = q;
size++;
break;
}
}
void ergodic() { //遍历链表
Node *p;
p = head->next;
while (p != NULL) {
cout << p->data << "\n";
p = p->next;
}
}
};
int main() { //主函数
int x;
LinkList LL;
while (true) {
cin >> x;
if (x == -1)
break;
LL.addNode(x); //加入节点
}
LL.ergodic(); //遍历链表
//system("pause");
return 0;
}