1、 输入n个不为零的整数作为节点元素值,遇到0代表输入结束(不创建元素值为0的节点),创建有序链表。输出整个链表。
2、 输入一个整数,将该数插入到有有序链表相应位置。输出整个链表。
3、 输入一个整数,在链表中进行搜索,输出其在链表中的第一个出现的位置。如果不存在输出0。
4、 再一次输入一个整数,在链表中进行搜索,输出其在链表中的第一个出现的位置。如果不存在输出0。
5、 再一次输入n个不为零的整数作为节1点元素值,遇到0代表输入结束(不创建元素值为0的节点),创建一个新的有序链表。输出整个链表。
6、 使用链表遍历器实现上面两个有序链表的合并,输出合并后的有序链表。
7、 提示:注意单节点链表的测试。
#include <iostream>
using namespace std;
struct chainNode
{
//数据成员
int element;
chainNode* next;
//专门给头结点准备的构造函数
chainNode(){
element = NULL;
next = NULL;
}
chainNode(const int& element)
{
this->element = element;
next = NULL;
}
chainNode(const int& element, chainNode* next)
{
this->element = element;
this->next = next;
}
};
//链表
class chain
{
public:
chain();
void youXuInsert(int zhi);
void insert(int zhi, int position);
void deleteNode();
void find(int zhi);
void print();
public:
chainNode* head;//头结点
int listSize;//元素个数
};
chain::chain()
{
head = new chainNode;
listSize = 0;
}
//有序插入
void chain::youXuInsert(int zhi)
{
chainNode* p = head;
while (p->next&&p->next->element<zhi)
{
p = p->next;
}
p->next = new chainNode(zhi,p->next);
listSize++;
}
//指定位置插入
void chain::insert(int zhi, int position)
{
chainNode* p = head;
if (position <= 0 || position > listSize+1)
{
return;
}
for (int i = 0; i < position-1; i++)
{
p = p->next;
}
p->next = new chainNode(zhi, p->next);
listSize++;
}
//搜索一个元素第一次出现的位置
void chain::find(int zhi)
{
int index = 1;
chainNode *p = head->next;
while (p)
{
if (p->element == zhi)
{
cout << index << endl;
return;
}
index++;
p = p->next;
}
cout << 0 << endl;
}
void chain::print()
{
chainNode *p = head->next;
if (p)
{
cout << p->element ;
p = p->next;
while (p)
{
cout << "," << p->element;
p=p->next;
}
cout << endl;
}
}
void heBing(chain& chain1,chain& chain2)
{
chainNode* p = chain1.head;
chainNode* q = chain2.head;
chainNode* temp;
while (p->next && q->next)
{
if (p->next->element < q->next->element)
{
p = p->next;
}
else {
temp = q->next;
q->next = q->next->next;
temp->next = p->next;
p->next = temp;
p = temp;
}
}
if (q->next)
{
p->next = q->next;
}
chain1.print();
}
int main()
{
chain chain1;
chain chain2;
//-------------------------------------------
cout << "Input1" << endl;
int index=0;
int zhi;
cin >> zhi;
while (zhi)
{
chain1.youXuInsert(zhi);
cin >> zhi;
index++;
}
chain1.listSize = index;
cout << "Output1" << endl;
chain1.print();
//--------------------------------------------------
cout << "Input2" << endl;
cin >> zhi;
chain1.youXuInsert(zhi);
cout << "Output2" << endl;
chain1.print();
//---------------------------------------------------
cout << "Input3" << endl;
cin >> zhi;
cout << "Output3" << endl;
chain1.find(zhi);
//-----------------------------------------------------
cout << "Input4" << endl;
cin >> zhi;
cout << "Output4" << endl;
chain1.find(zhi);
//------------------------------------------------------
cout << "Input5" << endl;
int index2 = 0;
cin >> zhi;
while (zhi)
{
chain2.youXuInsert(zhi);
cin >> zhi;
index2++;
}
chain2.listSize = index2;
cout << "Output5" << endl;
chain2.print();
heBing(chain1, chain2);
cout << "End" << endl;
return 0;
}