wislosophia 2017-10-14 02:51 采纳率: 0%
浏览 640

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");

}


析构出现问题

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:35
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘