链表的析构函数和插入函数

没想到因为大意,差一点让这个小小的析构函数阻碍我成功的步伐。

template 
LinkList::~LinkList()
{
	Node* p;
	while (first!= NULL)
	{
		p = first; first = first->next; delete p;
	}
}

所以说这些基础的东西都超级重要。

template 
void LinkList::Insert(int i, T x)
{
	Node* p; int count; Node* s;
	p = first; count = 0;
	while (p != NULL && count < i - 1)
	{
		p = p->next; count++;
	}
	if (p == NULL) throw"位置"; //没有找到i-1结点
	else
	{
		s = new Node;
		s->data = x;
		s->next = p->next;
		p->next = s;
	}
}

有一个小疑惑,但是应该可以这样理解:当链表为空时还有头结点,所以头指针不会为空,不能作为退出循环的条件,所以应该是可以正常插入的。

所以插入、删除时头结点都是存在的,所以first指针不会为空,即退出循环的条件只有链表已遍历完(位置错误)或者找到了正确的位置。不包括空表的情况(因为空表在有头结点时并不是特殊情况)。

而析构函数的目的是释放链表的每一节点,包括头结点,所以用first指针是否为空来判断,因为此时头结点可以被删除。

 

 

你可能感兴趣的:(数据结构,链表,c++)