#include
using namespace std;
struct Node
{
int data;
Node*next;
};
Node*head_Create()
{
Node*head,*p,*q;
int m,n;//元素的输入
q=head=new Node;//建立节点
cout<<"请输入数据";
for(cin>>n;n!=-1;cin>>n)
{
p=new Node;
p->data=n;
head->next=p;
head=p;
}
cout<<"请再次输入数据";
for(cin>>m;m!=-1;cin>>m)
{
q=new Node;
q->data=m;
head->next=q;
head=q;
}
return head;
}
void Merge(Node*p,Node*q)
{
Node *pa,*pb,*pc,*tail;
pa=p->next;
pb=q->next;
tail=p;
tail->next=NULL;
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<=pb->data)
{
pc->data=pb->data;
pa=pa->next;
}
else
{
pb=pb->next;
}
pc->next=tail->next;
tail->next=pc;
tail=pc;
}
cout<<pc;
}
int main()
{
Node*head,*p,*q;
head=head_Create();
Merge(p,q);
return 0;
}
head=head_Create();
你只输入了head这个链表,而pq都没有初始化
你下面合并当然不行。
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
Node():data(-1),next(nullptr){}
};
void freeNode(Node* head){
if(head == nullptr){
return;
}
Node* next = head->next;
delete head;
head = nullptr;
while(next != nullptr){
head = next;
next = next->next;
delete head;
head = nullptr;
}
}
Node* head_Create()
{
Node* head = nullptr;
int n;//元素的输入
head = new Node;//建立节点
Node* p = head;
cout<<"请输入数据"<<endl;
for(cin>>n;n!=-1;cin>>n)
{
Node* newNode = new Node;
newNode->data = n;
p->next = newNode;
p = newNode;
}
return head;
}
void print(Node* node){
if(nullptr == node){
cout << "节点为空" << endl;
return;
}
Node* next = node->next;
while( next != nullptr ){
cout << next->data <<" ";
next = next->next;
}
cout << endl;
}
Node* Merge(Node*p,Node*q)
{
if((p == nullptr) && (q == nullptr)){
cout <<"merge 参数都为空"<< endl;
return nullptr;
}
if(p == nullptr){
return q;
}else if(q == nullptr){
return p;
}
Node* pa = p->next;
Node* pb = q->next;
Node* head = new Node();
Node* prevNode = head;
Node* newNode = nullptr;
while(pa != nullptr && pb != nullptr)
{
newNode = new Node();
if(pa->data <= pb->data)
{
newNode->data = pa->data;
prevNode->next = newNode;
prevNode = newNode;
pa=pa->next;
}
else
{
newNode->data = pb->data;
prevNode->next = newNode;
prevNode = newNode;
pb=pb->next;
}
}
if(pa != nullptr){
while(pa){
newNode = new Node();
newNode->data = pa->data;
prevNode->next = newNode;
prevNode = newNode;
pa = pa->next;
}
} else if(pb != nullptr){
while(pb){
newNode = new Node();
newNode->data = pb->data;
prevNode->next = newNode;
prevNode = newNode;
pb = pb->next;
}
}
return head;
}
int main()
{
Node *p = head_Create();
print(p);
Node *q = head_Create();
print(q);
Node* newHead = Merge(p,q);
if(nullptr != newHead){
print(newHead);
}
freeNode(p);
freeNode(q);
freeNode(newHead);
return 0;
}
输入时按照从小到大输入。原来的代码没有释放内存这里增加上。现有代码还有一些重复代码暂时未提函数。应该可以实现你需要的功能。