
|
根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。
删除没有头节点的单链接列表中的特定元素. 一个非常麻烦的情况是删除链表中的元素,第一个节点是要删除的节点删除链表中的元素,因此,链表的头通常会更改,在删除??功能中,要更改客户端的头,必须传入头的地址. 否则,客户的负责人将永远不会改变. 也就是说,如果参数的类型为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 ++中,您可以使用引用(节点*&)来达到相同的目的. 我认为指针和引用的本质是相同的.
|
温馨提示:喜欢本站的话,请收藏一下本站!