65,211
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
struct LNode
{
int data;
struct LNode *next;
};
void createList(LNode &pHead, int n)
{
int i;
LNode *p,*q;
p=&pHead;
for(i=1; i<=n; i++)
{
q=(LNode *)malloc(sizeof(LNode));
memset(q,0,sizeof(q));//清空节点空间
printf("输入数据:");
scanf("%d",&q->data);
//尾插入算法
q->next=NULL;
p->next=q;
p=q;
}
}
void dispList(LNode &pHead)
{
LNode *p=pHead.next;
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
}
//通过原结点的链表合并
void MergeList(LNode &La, LNode &Lb, LNode &Lc)
{
LNode *ap,*bp,*cp,*tp;
ap=La.next;
bp=Lb.next;
cp=&La; Lc=La;
tp=&Lb;
while(ap&&bp)
{
if(ap->data<bp->data)
{
cp->next=ap; cp=ap; ap=ap->next;
}
else if(ap->data>bp->data)
{
cp->next=bp; cp=bp; bp=bp->next;
}
else
{
cp->next=ap; cp=ap;ap=ap->next;
//释放Lb中的节点空间
tp->next=bp->next; free(bp); bp=tp->next;
}
}
cp->next=ap?ap:bp;
//问题:回收链表Lb的头结点空间
//如果用free,是会出现野指针,因为Lb不是通过malloc申请的,不存在堆内存中。
//但它是通过&,别名指定的,是一个特殊的指针,内存空间是在哪里申请的呢,应该如何回收呢?
//或是说会自动回收呢,如果自动回收了,怎么在main里又可以调用显示呢,所以是没有回收。
//请问下这个头结点如何回收,谢谢?
}
int main(void)
{
LNode m_pHead1,m_pHead2,m_pHead3;//已经带有头结点
printf("链表1\n");
createList(m_pHead1,5);
printf("链表2\n");
createList(m_pHead2,5);
printf("合并链表数据\n");
MergeList(m_pHead1,m_pHead2,m_pHead3);
dispList(m_pHead3);
return 0;
}
void ListDestroy(LNode* &L)// 销毁链表,传入的是指针
{
LNode* p;
p=L;
while(L)
{
L=p->next;
free(p);
p=L;
cout<<"free memory"<<endl;
}
}
else
{
cp->next=ap; cp=ap;ap=ap->next;
//释放Lb中的节点空间
tp->next=bp->next; free(bp); bp=tp->next;
}