关于链表出现debug assertion failed
这是个关于链表的问题 将两个链表(结点中data(int类型)从小到大排列)合并成一个data从大到小排列的新链表 各结点的地址不改变
我是定义了一个拷贝构造函数做的
代码如下 输出正常 但是有错误警告出现 debug assertion failed
求高人解答
#include <iostream.h>
struct Node
{
int data;
Node *next;
};
class LinkList
{
Node *first;
public:
LinkList(){first=new Node;first->next=NULL;}
LinkList(int a[],int n);
LinkList(LinkList &m1,LinkList &n1);
~LinkList();
int Length();
int Get(int i);
int Locate(int x);
void Insert(int i,int x);
int Delete(int i);
void PrintList();
};
LinkList::LinkList(int a[],int n)
{
first=new Node;
Node *r=first;
for(int i=0;i<n;i++)
{
Node *s=new Node;s->data=a[i];
r->next=s;r=s;
}
r->next=NULL;
}
LinkList::LinkList(LinkList &m1,LinkList &n1)
{
first=new Node;
first->next=NULL;
Node *p1=first;
Node *pm=m1.first->next,*pn=n1.first->next,*s;
while(pm||pn)
{
if(pm&&pn&&pm->data<=pn->data||!pn)
{
s=pm;pm=pm->next;
}
else
{
s=pn;pn=pn->next;
}
s->next=p1->next;
p1->next=s;
}
}
LinkList::~LinkList()
{
Node *p=first;
while(p)
{
Node *q=p;
p=p->next;
delete q;
}
}
int LinkList::Length()
{
Node *p=first->next;
int j=1;
while(p)
{
p=p->next;
j++;
}
return j;
}
int LinkList::Get(int i)
{
Node *p=first->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p)throw"位置";
else return p->data;
}
int LinkList::Locate(int x)
{
Node *p=first->next;
int j=1;
while(p->data!=x)
{
p=p->next;
j++;
}
if(!p)throw"位置";
return j;
}
void LinkList::Insert(int i,int x)
{
Node *p=first;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p)throw"位置";
else
{
Node *s=new Node;s->data=x;
s->next=p->next;
p->next=s;
}
}
int LinkList::Delete(int i)
{
Node *p=first;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||!p->next)throw"位置";
else
{
Node *q=p->next;int x=q->data;
p->next=q->next;
delete q;
return x;
}
}
void LinkList::PrintList()
{
Node *p=first->next;
while(p)
{
cout<<p->data<<endl;
p=p->next;
}
cout<<'\n'<<"完成"<<endl;
}
void main()
{
int a[6]={1,2,3,4,5,6},b[7]={7,12,14,23,24,35,43};
LinkList m(a,6),n(b,7);
LinkList p(m,n);
p.PrintList();
}