链表的创建、删除、反向(C语言)
来源:互联网 发布:唱歌 台风 知乎 编辑:程序博客网 时间:2024/05/17 02:58
好久没接触C了,今天温习一下链表操作。
链表反向用的方式是新建一个链表,将原链表元素依次插入至新链表头部,实现反向。
链表删除是参考了linus的方法,用一个二级指针,省去了教科书中方式关于链表头部的判断。
#include <stdio.h>#include <malloc.h>typedef struct Node_s{int value;struct Node_s *next;}Node_t;void InsertNode(Node_t **List,int value) {Node_t *node = (Node_t *)malloc(sizeof(Node_t));node->value = value;if(*List != NULL){Node_t *current = *List;Node_t *pre = *List;while(current != NULL && value > current->value){pre = current;current = current->next;}node->next = current;pre->next = node;}else{node->next = NULL;*List = node;}}void RemoveNode(Node_t **List,int value){Node_t **current = List;while(*current != NULL){if(IsNode(*current,value)){current = &((*current)->next);}else{Node_t *node = *current;*current = (*current)->next;free(node);break;}if((*current)->value >value){ //因为是有序链表,所以超过范围可以判断此链表中无删除元素break;}}}void InsertHead(Node_t **List,int value){Node_t *node = (Node_t *)malloc(sizeof(Node_t));node->value = value;node->next = *List;*List = node;}void ReverseList(Node_t **List){Node_t *RList = NULL; //新链表Node_t *current = *List;while(current){InsertHead(&RList,current->value); //将元素依次插入至新链表Node_t *node = current;current = current->next;free(node);}*List = RList;}int IsNode(Node_t *Node,int value){return ((Node->value != value)); //是否符合条件}int main(int argc,char **argv){Node_t *List = NULL;InsertNode(&List,2);InsertNode(&List,5);InsertNode(&List,3);ReverseList(&List);if(List != NULL){printf("%d\n",List->value); //这里可以加断点进行调试信息查看}return 0;}
0 0
- 链表的创建、删除、反向(C语言)
- c语言链表的创建、插入、删除、排序
- (C语言)链表的创建、遍历、插入和删除
- c语言单链表的创建、插入、删除
- [C]C语言基础巩固专题----链表之(链表创建和删除)
- C语言实现带头结点的链表的创建、查找、插入、删除
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C语言 链表的创建,以及节点的增加和删除
- 单链表的基本操作(创建,删除,增加,反向)
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- C语言实现动态链表的创建、删除、插入、输出(CentOS6.5上调试成功)
- C语言链表的创建、插入、查找、删除、清空操作
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- 用c语言完成一个双向链表的创建,插入,删除
- C语言中,链表的创建,插入,删除,遍历,求链表长度,排序等
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作
- C语言数据结构(链表)单向链表的创建删除逆序
- 拖放 和 共享文件夹
- mysql日期转换格式
- 如何判断样式表何时真正加载完
- 人活着系列之芳姐和芳姐的猪(最短路_SPFA+前向星)
- jsp+ajax+js验证用户名是否存在
- 链表的创建、删除、反向(C语言)
- 带内阻塞,带外阻塞 in band out band block level
- 以后开始写博客,作为学习的备忘录
- Netfilter components 相关的比较好的流程图
- Java中字符编码问题
- mysql时区(timezone)转换函数
- C#中如何调用动态链接库DLL
- 妙趣横生的算法-图
- iOS开发--用方法获取内存使用情况