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