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