链表销毁时要一个一个地释放链表的每个节点
对于已释放的节点不能重复释放
检查内存泄露要在Debug模式下,在文件头添加
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
退出程序处添加_CrtDumpMemoryLeaks();
调试状态时观察输出窗口
#include "stdafx.h"
#include "iostream"
#include "LinkList.h"
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
LinkList La, Lb;
int a = 0, b = 0;
cin >> a >> b;
CreateList(La, a);
CreateList(Lb, b);
MergeList(La, Lb);
Display(La);
Destroy(La);
_CrtDumpMemoryLeaks();
return 0;
}
"LinkList.h"文件
<pre name="code" class="cpp" style="font-size: 16px; line-height: 24px;"><pre name="code" class="cpp">typedef struct LNode
{
int data;
LNode *next;
}*LinkList;
void CreateList(LinkList &L, int n);
void MergeList(LinkList &La, LinkList &Lb);
void Display(LinkList &L);
void Destroy(LinkList &L);
"LinkList.cpp"文件
#include "stdafx.h"
#include "iostream"
#include "LinkList.h"
using namespace std;
//生成链表
void CreateList(LinkList &L, int n)
{
L = new LNode;
LNode *p;
L->next = NULL;
int i = 0;
for (i = n; i > 0; --i)
{
p = new LNode;
cin >> p->data;
p->next = L->next;
L->next = p;
}
}
//合并链表La和Lb,并La为新生成的链表
void MergeList(LinkList &La, LinkList &Lb)
{
LinkList Lc;
LNode *pa = La->next;
LNode *pb = Lb->next;
LNode *pc;
Lc = pc = La;
while (pa&&pb)
{
if (pa->data <= pb->data)
{
pc->next = pa;
pc = pc->next;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pc->next;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
delete Lb;
}
//输出链表元素
void Display(LinkList &L)
{
LNode *p;
p = L->next;
while (p)
{
cout << p->data;
p = p->next;
}
}
//销毁链表
void Destroy(LinkList &L)
{
LNode *p;
p = L;
while (p)
{
L = p->next;
delete p;
p = L;
}
}