7-4 两个有序链表序列的合并 (20分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 3 5 -1
2 4 6 8 10 -1
输出样例:
1 2 3 4 5 6 8 10
#include<iostream>
#include<cstdio>
typedef struct MyNode* NodePoint;
struct MyNode
{
int data;
NodePoint link;
};
void CreateNode(int NodeData, NodePoint* PRear) {
NodePoint P;
P = (NodePoint)malloc(sizeof(struct MyNode));
P->data = NodeData;
P->link = NULL;
(*PRear)->link = P;
*(PRear) = P;
}
NodePoint ReadNode() {
int NodeNum, NodeData;
NodePoint P, Rear, Temp;
std::cin >> NodeNum;
P = (NodePoint)malloc(sizeof(struct MyNode));
P->link = NULL;
Rear = P;
while (NodeNum != -1) {
NodeData=NodeNum;
CreateNode(NodeData, &Rear);
std::cin >> NodeNum;
}
Temp = P;
P = P->link;
free(Temp);
//std::cout << "Done" << "\n";
return P;
}
void NodeAdd1(NodePoint P1, NodePoint P2) {
if(P1==NULL&&P2==NULL){
std::cout<<"NULL"<<"\n";
}
NodePoint P, P0;
P = (NodePoint)malloc(sizeof(struct MyNode));
P0 = P;
while (P1 && P2) {
if (P1->data <= P2->data) {
P0->link = P1;
P0 = P1;
//std::cout << P0->data << "\n";
P1 = P1->link;
}
else {
P0->link = P2;
P0 = P2;
//std::cout << P0->data << "\n";
P2 = P2->link;
}
}
P0->link = P1 ? P1 : P2;
//P0->link = NULL;
P = P->link;
if(P) {
std::cout << P->data;
P = P->link;
}
while (P) {
std::cout << " " << P->data ;
P = P->link;
}
}
void NodeOut(NodePoint P) {
while (P) {
std::cout << "after add:" << P->data << "\n";
P = P->link;
}
}
int main() {
NodePoint P1, P2, P3;
P1 = ReadNode();
P2 = ReadNode();
NodeAdd1(P1, P2);
//NodeOut(P1);
}