c++初学者:我的这行代码跑出来合并的链表为什么无法输出?

#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;
}

输入时按照从小到大输入。原来的代码没有释放内存这里增加上。现有代码还有一些重复代码暂时未提函数。应该可以实现你需要的功能。