c++的单链表合并,析构出现问题

#include
#include
#include
using namespace std;

template
struct Node
{
//数据成员
ElemType data; //数据域
Node *next; //指针域

                                                //构造函数
Node();                                         //无参数的构造函数
Node(ElemType e, Node<ElemType> *Link = NULL);  //有参数的构造函数

};

template
Node::Node()
{
next = NULL;
}

template
Node::Node(ElemType e, Node *link)
{
data = e;
next = link;
}

//单链表
template
class LinkList
{
protected:
//单链表类模板的数据成员
Nodehead; //头指针结点
int length; //元素个数
public:
//单链表类模板的函数成员
LinkList(); //无参数构造函数
LinkList(ElemType v[], int n); //有参数的构造函数
virtual ~LinkList(); //析构函数
int GetLength()const; //求链表长度
bool IsEmpty()const; //判断链表是否为空
void Clear(); //将链表清空
void UseMerge(LinkListp1, LinkListp2);
Node
merge(Node *head1, Node *head2); //合并
void output(); //将链表输出
};

//无参数的构造函数
template
LinkList::LinkList()
{
head = new Node; //构造头函数
length = 0; //单链表长度定为0;
}

//有参数构造函数
template
LinkList::LinkList(ElemType v[], int n)
{
//排序
for (int i = 0; i < n; i++)
{
for (int j = 1; j < n - i; j++)
{
if (v[j] < v[j - 1])
swap(v[j], v[j - 1]);
}
}
Node *p;
p = head = new Node; //构造头结点
for (int i = 0; i < n; i++)
{
p->next = new Node(v[i], NULL);
assert(p->next); //构造元素结点失败,终止程序运行
p = p->next;
}
length = n;
}

//析构函数
template
LinkList::~LinkList()
{
Clear(); //清空链表
delete head; //释放头结点所指空间
}

//清空链表
template
void LinkList::Clear()
{
Node *p;
p = head->next;
while (p != NULL)
{
cout << p->data;
head->next = p->next;
delete p;
p = head->next;
}
length = 0;
}

//求链表长度
template
int LinkList::GetLength()const
{
return length;
}

//判断链表是否为空
template
bool LinkList::IsEmpty()const
{
Node *p = head->next;
if (p != NULL)
return false;
return true;
}

//调用合并
template
void LinkList::UseMerge(LinkListp1, LinkListp2)
{
head->next = merge(p1.head->next, p2.head->next);
}

//合并链表

template
Node* LinkList::merge(Node *head1, Node *head2)
{
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
Node *head = NULL;
if (head1->data < head2->data)
{
head = head1;
head->next = merge(head1->next, head2);
}
else
{
head = head2;
head->next = merge(head1, head2->next);
}
cout << "e";
return head;
}

//输出链表
template
void LinkList::output()
{
Node *p;
p = head->next;
while (p != NULL)
{
cout << p->data << ",";
p = p->next;
}
}

void main() {

cout << "输入第一组五个整数:";
int v1[1];
for (int i = 0; i < 1; i++)
    cin >> v1[i];
cout<<"\n";
LinkList<int> p1(v1, 1);
cout << "输出有序单链表应为:";
p1.output();
cout << "\n";

cout << "输入第二组五个整数:";
int v2[1];
for (int i = 0; i < 1; i++)
    cin >> v2[i];
cout << "\n";
LinkList<int> p2(v2, 0);
cout << "输出有序单链表应为:";
p2.output();
cout << "\n";

LinkList<int> p;
p.UseMerge(p1, p2);
cout << "合并两个单链表,合并后输出结果应为:";
p.output();

system("pause");

}


析构出现问题

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!