单链表结点重复释放不报错??
本人写了个单链表如下:(MySinglyLinkedList.h)
#include <iostream>
template<class T> class LinkedList;
template<class T>
class LinkedNode { //链表结点类
public:
LinkedNode(T new_data):data(new_data) {; }
private:
friend class LinkedList<T>;
LinkedNode<T> *next;
T data;
};
template<class T>
class LinkedList { //单链表类
public:
LinkedList();
~LinkedList();
void PushNode(T new_data);
void Delete(LinkedNode<T> *pnode);
void Show();
private:
LinkedNode<T> *head; //头指针
LinkedNode<T> *tail; //尾指针
int length; //链表长度
};
template<class T>
LinkedList<T>::LinkedList()//链表初始化时为空链表
{
head = tail = NULL;
length = 0;
}
template<class T>
LinkedList<T>::~LinkedList()
{
LinkedNode<T> *ptr = head;
while (ptr)
{
LinkedNode<T> *ptr_del = ptr;
ptr = ptr->next;
Delete(ptr_del);
}
}
template<class T>
void LinkedList<T>::PushNode(T new_data)//链表尾部增加数据为new_data的一个结点
{
LinkedNode<T> *pnew_node = new LinkedNode<T>(new_data);
pnew_node->next = NULL;
if (!length) {
head = tail = pnew_node;
length++;
} else {
tail->next = pnew_node;
tail = pnew_node;
length++;
}
}
template<class T>
void LinkedList<T>::Delete(LinkedNode<T> *pnode)//删除pnode所指的结点
{
LinkedNode<T> *ptr = head;
if (pnode==head) {
head = pnode->next;
} else {
while(ptr->next != pnode)
{
ptr = ptr->next;
}
ptr->next = pnode->next;
}
if(pnode == tail)
tail = ptr;
delete pnode;
length--;
}
template<class T>
void LinkedList<T>::Show() //输出链表中所有结点
{
LinkedNode<T> *pnode = head;
while(pnode)
{
std::cout << pnode->data << std::endl;
pnode = pnode->next;
}
std::cout << "In total: " << length << std::endl;
}
#include "MySinglyLinkedList.h"
#include <cstdlib>
#include <ctime>
using namespace std;
int main(int argc, char *argv[])
{
int list_len = 5;
srand(time(0));
if (argc > 1)
list_len = atoi(argv[1]);
LinkedList<int> test_list; //实例化第一个链表 test_list
for (int i = 0; i < list_len; i++) //链表长度为输入值list_len,每个元素是随机数
{
int cur_data = rand()%list_len;
test_list.PushNode(cur_data);
}
test_list.Show();
LinkedList<int> test2 = test_list; //实例化第二个链表 test2
test2.Show();
return 0;
}