单链表的按位序删除(带头结点)

89 阅读1分钟

ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。

方法:找到第i-1个结点,将其指针指向第i+1个结点,并释放第i个结点

头结点可以看作第0个结点

image.png 假如我们要删除第一个结点:

image.png 代码实现:

//咸鱼学长版
bool ListDelete(LinkList& L, int i, ElemType& e) {
	if (i < 1) {
		return false;
	}

	LNode* p;//指针p指向当前扫描到的结点
	int j = 0;//当前p指向的是第几个结点
	p = L;//L指向头结点,头结点是第0个结点(不存数据)

	while (p != NULL && j < i - 1) {//循环找到第i-1个结点
		p = p->next;
		j++;
	}

	if (p == NULL)//i值不合法
		return false;
	if (p->next == NULL)//第i-1个结点之后已无其他结点
		return false;

	LNode* q = p->next;
	e = q->data;
	p->next = q->next;
	free(q);

	return true;
}