【PTA段错误】求各位看一下这个段错误在哪儿啊

img

img

#include<iostream>
using namespace std;

typedef struct LinkNode
{
    int data;
    LinkNode*next;
}LinkNode;

void CreatL(LinkNode*&L);
void DispL(LinkNode*L);
LinkNode*tog(LinkNode*s1,LinkNode*s2);

int main()
{
    LinkNode*s1,*s2,*s3;
    CreatL(s1);
    CreatL(s2);
    s3 = tog(s1,s2);
    DispL(s3);
    return 0;
}

void CreatL(LinkNode*&L)
{
    LinkNode*rear,*s;
    L=new LinkNode;
    L->next = NULL;
    rear = L;
    int n;
    while(1)
    {    cin>>n;
        if(n==-1)
            break;        
        s=new LinkNode;
        s->data=n;
        s->next=NULL;
        rear->next=s;
        rear=s;
    }
}

void DispL(LinkNode*L)
{
    LinkNode*p;
    p=L->next;
    if(!p)cout<<"NULL";
    int flag=0;
    while(p!=NULL)
    {
        
        if(!flag)
        {
            cout<<p->data;
            p=p->next;
            flag++;
        }    
        cout<<" "<<p->data;
        p=p->next;
    }
}


LinkNode*tog(LinkNode*s1,LinkNode*s2)
{

    LinkNode*t1,*t2,*rear,*s,*x;
    s=new LinkNode;
    s->next=NULL;
    rear=s;
    t1=s1->next;t2=s2->next;
    if(!t1||!t2)
    {
        return NULL;
    }
    else
    {
    
        while(t1&&t2)
        {
        
            if(t1->data>t2->data)
            {
                t2=t2->next;
            }
            else if(t1->data==t2->data)
            {
                x=new LinkNode;
                x->data=t1->data;
                x->next=NULL;
                rear->next=x;
                rear=x;
                t1=t1->next;
                t2=t2->next;
            }
            else
            {
                t1=t1->next;
            }
            
        }
        return s;
    }
}


段错误一般是操作空指针或野指针了

DispL的逻辑有问题
47行,如果p==0,输出NULL后应该直接退出。
58行 输出p->data的时候没有判断p是否为0,或者把后面两句放在else语句中
代码修改如下:

void DispL(LinkNode* L)
{
    LinkNode* p;
    p = L->next;
    if (!p)
    {
        cout << "NULL";
        return;
    }
    int flag = 0;
    while (p != NULL)
    {
        if (!flag)
        {
            cout << p->data;
            p = p->next;
            flag++;
        }
        else
        {
            cout << " " << p->data;
            p = p->next;
        }
            
    }
}