当前位置:萝卜系统 > 硬件软件教程 > 详细页面

删除单链下文中的特定元素而无需前导节点

删除单链下文中的特定元素而无需前导节点

更新时间:2023-06-24 文章作者:未知 信息来源:网络 阅读次数:

根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。

删除链表中的元素_从数组中删除指定元素_删除链表中的元素

删除没有头节点的单链接列表中的特定元素. 一个非常麻烦的情况是删除链表中的元素,第一个节点是要删除的节点删除链表中的元素,因此,链表的头通常会更改,在删除??功能中,要更改客户端的头,必须传入头的地址. 否则,客户的负责人将永远不会改变. 也就是说,如果参数的类型为Node *,则仅修改磁头的副本. 这是C语言中的基本问题. 在我阅读了郝戈的文章“ Linus: 使用辅助指针删除单链接列表”之后,写了这个博客.

删除链表中的元素_删除链表中的元素_从数组中删除指定元素

过程如下:

删除链表中的元素_删除链表中的元素_从数组中删除指定元素

/********************************************************************
	created:	2013/10/06
	created:	6:10:2013   0:18
	file base:	main
	file ext:	c
	author:		Justme0 (http://blog.csdn.net/Justme0)
	
	purpose:	在不带头结点的单链表中删除特定元素(C语言描述)
*********************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node {
	ElemType data;
	struct Node *next;
}Node;
/*
** 功能		: 删除链表中所有数据域为 x 的结点
** ppNode	: 链表的首结点的地址的地址
*/
void list_remove(Node **ppNode, ElemType x) {
	Node *temp = NULL;	// 用于释放结点
	for (; NULL != *ppNode; ) {
		if ((*ppNode)->data == x) {
			temp = *ppNode;
			*ppNode = (*ppNode)->next;
			printf("remove node: %c\n", temp->data);
			//	free(temp);
			temp = NULL;
		} else {
			ppNode = &((*ppNode)->next);	// 成员指针
		}
	}
}
int main(int argc, char **argv) {
	Node a = {'b', NULL};	// 链尾结点
	Node b = {'a', &a};
	Node *head = &b;		// 指向链表的头指针(不带头结点)
	list_remove(&head, 'a');
	system("pause");
	return 0;
}

删除链表中的元素_从数组中删除指定元素_删除链表中的元素

当然,在C ++中,您可以使用引用(节点*&)来达到相同的目的. 我认为指针和引用的本质是相同的.


本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-248511-1.html



温馨提示:喜欢本站的话,请收藏一下本站!

本类教程下载

系统下载排行

网站地图xml | 网站地图html