下面是我写好的代码 (刚能创建出链表)
我想做的是把创建链表avc 和 bcd然后让这两个链表里的内容合并
#include<iostream>
#include<string>
using namespace std;
struct List
{
char data; //数据域
List* next; //指针域
};
//新建链表头结点初始化
List* HeadNode() {
List* head = new List;
head->data = 0;
head->next = NULL;
return head;
}
//新建链表数据结点
List* CreateList(List* head, int x)
{
List* pre = head;
cout << "输入" << x << "个字符:";
for (int i = 0; i < x; i++)
{
List* p = new List;
cin >> p->data; //新节点的数据域填数据
pre->next = p; //老结点的next指针指向新节点
pre = p; //让新节点赋值给老结点 形成一次循环
pre->next = NULL; //让最后一个新生成的结点指向空 变成尾结点
}
return head;
}
//计算结点个数
int getLength(List* head) {
int count = 0;
List* p = head->next;
while (p != NULL) {
p = p->next;
count++;
}
return count;
}
//在指定位置插入数据
void InsertList(List* head, int n) {
List* p = head;
if (n<0 || n>getLength(head)) {
cout << "输入错误" << endl;
}
else {
for (int i = 1; i < n; i++) {
p = p->next;
}
List* newNode = new List; //构造一个要插入的新的结点
cout << "请输入内容:";
cin >> newNode->data; //输入人要插入新的结点的数据域
newNode->next = p->next; //新节点的指针域指向下一个结点
p->next = newNode; //上一个结点的指针域指向新节点
}
}
//删除指定信息
void DeleteList(List* head, int n) {
List* p = head;
if (n<0 || n>getLength(head) - 1) {
cout << "输入错误" << endl;
}
else {
for (int i = 1; i < n; i++) { //找到删除结点的上一个结点
p = p->next;
}
p->next = p->next->next; //将删除节点的上一个结点指向它的下下个结点
}
}
//删除全部链表
void DeleteAll(List* head) {
List* p = head->next; //p表示下一个结点
List* q = new List; //q表示上一个结点
while (p != NULL) {
q = p; //让p的下一个结点等于新节点
p = p->next; //让p结点等于下一个结点
head->next = p; //头结点的下一个结点等于p
q->next = NULL; //q的下一个结点等于空
delete q; //释放q
}
head->next = NULL; //让head下一个结点指向空
}
//两个链表合并
List* ConnectList(List* a, List* b)
{
if (a == NULL) { return b; };
if (b == NULL) { return a; };
if (a->data < b->data) {
a->next = ConnectList(a->next, b);//递归调用
return a;
}
else {
b->next = ConnectList(a, b->next);//递归调用
return b;
}
}
//输出链表
void Print(List* head)
{
List* p = head->next; //p是第一个结点
while (p != NULL)
{
cout << p->data; //输出结点的数据域
p = p->next; //让结点p后移
}
}
//主函数
int main()
{
List* p = HeadNode();
List* q = HeadNode();
List* hebing = HeadNode();
while (1) {
string a;
cin >> a;
if (a == "createlist") {
int n;
cout << "请输入结点个数:";
cin >> n;
CreateList(p, n);
cout << "创建成功" << endl;
}
if (a == "insertnode") {
int n;
cout << "请输入插入的位置:";
cin >> n;
InsertList(p, n);
cout << "插入成功!" << endl;
}
if (a == "deletenode") {
int n;
cout << "请输入删除的位置:";
cin >> n;
DeleteList(p, n);
cout << "删除成功!" << endl;
}
if (a == "deleteall") {
DeleteAll(p);
cout << "删除成功!" << endl;
}
if (a == "print") {
Print(p);
cout << endl;
}if (a == "back") {
break;
}if (a == "merge") {
hebing = ConnectList(p, q);
}
if (a == "printmerge") {
Print(hebing);
}
}
delete p;
delete q;
delete hebing;
return 0;
}
实在不行 vector map都行