/*将两个链表交叉排序,一个结束的话另一次顺次排列
* 不能新申请空间
* */
# include <iostream>
using namespace std;
//辅助结构体,作为链表节点
struct Node
{
int val;
Node* next;
};
//创建链表函数(头插法)
Node* create(int n)
{
Node* head;
Node* p1;
Node* p2;
for (int i=0; i<n; i++)
{
if (i == 0)
{
head = new Node;
cout<<"请输入第1个元素:";
cin>>head->val;
head->next = NULL;
p1 = head;
}
else
{
p2 = new Node;
cout<<"请输入第"<<i+1<<"个元素:";
cin>>p2->val;
p2->next = NULL;
p1->next = p2;
p1 = p2;
}
}
return head;
}
//合并函数(该函数只将长度较短函数插进长度较长的函数中此后长度较长的函数依次顺延)
void merge(Node* headA,Node* headB)
{
int getlen(Node* head); //前置声明函数,因为此函数在后边定义被调用时需声明
void show(Node* head);
Node* p;
Node* q;
Node* k;
int a1 = getlen(headA);
int b1 = getlen(headB);
if (a1 >= b1){
p = headA;
k = headA;
q = headB;
} else if (a1< b1){
p = headB;
k = headB;
q = headA;
}
while(q != NULL)
{
p = p->next;
k->next = q;
k = q;
q = q->next;
k->next = p;
k = p;
}
k = a1 > b1 ? headA :headB;
cout << "合并之后的链表:"<<endl;
show(k);
}
//打印链表
void show(Node* head) {
Node* p = head;
while(p)
{
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
//获取链表节点个数
int getlen(Node* head){
Node* p = head;
int count = 0;
while(p)
{
count++;
p = p->next;
}
return count;
}
int main()
{
Node* headA = NULL;
Node* headB = NULL;
int a,b;
cout << "请指定要创建链表A的节点个数: ";
cin >> a;
headA = create(a);
cout <<"链表A : " << endl ;
show(headA);
cout << "请指定要创建链表B的节点个数: ";
cin >> b;
headB = create(b);
cout << "链表B : " << endl;
show(headB);
merge (headA,headB);
return 0;
}
* 不能新申请空间
* */
# include <iostream>
using namespace std;
//辅助结构体,作为链表节点
struct Node
{
int val;
Node* next;
};
//创建链表函数(头插法)
Node* create(int n)
{
Node* head;
Node* p1;
Node* p2;
for (int i=0; i<n; i++)
{
if (i == 0)
{
head = new Node;
cout<<"请输入第1个元素:";
cin>>head->val;
head->next = NULL;
p1 = head;
}
else
{
p2 = new Node;
cout<<"请输入第"<<i+1<<"个元素:";
cin>>p2->val;
p2->next = NULL;
p1->next = p2;
p1 = p2;
}
}
return head;
}
//合并函数(该函数只将长度较短函数插进长度较长的函数中此后长度较长的函数依次顺延)
void merge(Node* headA,Node* headB)
{
int getlen(Node* head); //前置声明函数,因为此函数在后边定义被调用时需声明
void show(Node* head);
Node* p;
Node* q;
Node* k;
int a1 = getlen(headA);
int b1 = getlen(headB);
if (a1 >= b1){
p = headA;
k = headA;
q = headB;
} else if (a1< b1){
p = headB;
k = headB;
q = headA;
}
while(q != NULL)
{
p = p->next;
k->next = q;
k = q;
q = q->next;
k->next = p;
k = p;
}
k = a1 > b1 ? headA :headB;
cout << "合并之后的链表:"<<endl;
show(k);
}
//打印链表
void show(Node* head) {
Node* p = head;
while(p)
{
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
//获取链表节点个数
int getlen(Node* head){
Node* p = head;
int count = 0;
while(p)
{
count++;
p = p->next;
}
return count;
}
int main()
{
Node* headA = NULL;
Node* headB = NULL;
int a,b;
cout << "请指定要创建链表A的节点个数: ";
cin >> a;
headA = create(a);
cout <<"链表A : " << endl ;
show(headA);
cout << "请指定要创建链表B的节点个数: ";
cin >> b;
headB = create(b);
cout << "链表B : " << endl;
show(headB);
merge (headA,headB);
return 0;
}