带头结点的单链表的插入,删除,转置,清空,判断空,统计节点数目
来源:互联网 发布:云计算新闻 编辑:程序博客网 时间:2024/04/20 13:11
//单链表 //带头结点的单链表 #include<stdio.h> #include<malloc.h> //单链表的结构体 typedef struct _Node{int data;struct _Node* next;}Node, *LinkList;void Init(LinkList* list){(*list) = (Node*)malloc(sizeof(Node));(*list)->next = NULL;}void InsertHeadList(LinkList list){int val;scanf("%d", &val);while (val != 0){Node* node = (Node*)malloc(sizeof(Node));node->data = val;node->next = list->next;list->next = node;scanf("%d", &val);}}void PrintList(LinkList list){Node* r;r = list->next;while (r != NULL){printf("%d ", r->data);r = r->next;}printf("\n");}void InsertTailList(LinkList list){int val;scanf("%d", &val);Node* s = list;while (s->next != NULL){s = s->next;}while (val != 0){Node* node = (Node*)malloc(sizeof(Node));node->data = val;node->next = NULL;s->next = node;s = node;scanf("%d", &val);}}void DeleteHeadList(LinkList list){if (list->next == NULL){return;}Node* s = list->next;list->next = list->next->next;free(s);}void DeleteTailList(LinkList list){if (list->next == NULL){return;}Node* r = list;while (r->next->next != NULL){r = r->next;}Node* s = r->next;r->next = NULL;free(s);}void ClearList(LinkList list){while (list->next != NULL){DeleteTailList(list);}}bool IsEmpty(LinkList list){if (list->next == NULL){return true;}return false;}int nCountList(LinkList list){int num = 0;Node* r = list->next;while (r != NULL){r = r->next;num++;}return num;}void ReverseList(LinkList list){//三指针法 //一个节点和空链表都是不需要逆转的 if (list->next == NULL || list->next->next == NULL){return;}Node* pre;Node* mid;Node* last;pre = list->next;mid = pre->next;last = mid->next;pre->next = NULL;//如果有三个节点以上我们可以进入循环体进行操作 while (last != NULL){//每次反转一个 mid->next = pre;//节点后移 pre = mid;mid = last;last = last->next;}mid->next = pre;list->next = mid;}int main(void){LinkList list;Init(&list);//单链表的插入 //头插 InsertHeadList(list);//尾插 InsertTailList(list);//统计节点数目 int nCount = nCountList(list);printf("nCount = %d\n", nCount);//单链表的删除 //头删 DeleteHeadList(list);//尾删 DeleteTailList(list);PrintList(list);//带头结点的单链表的逆序 ReverseList(list);PrintList(list);//清空 ClearList(list);//判断空 bool temp = IsEmpty(list);if (temp == true){printf("空\n");}else{printf("不空\n");}return 0;}
阅读全文
0 0
- 带头结点的单链表的插入,删除,转置,清空,判断空,统计节点数目
- 不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作
- C++中链表的创建、输出、节点删除、节点插入、翻转、清空
- C语言实现双向非循环链表(不带头结点)的清空
- C语言实现单链表的节点插入(带头结点)
- C语言实现单链表节点的删除(带头结点)
- 不带头结点的单链表删除任意一个节点
- remove() 删除节点 | detach() 删除节点 | empty() 清空节点的内容 | clone() 复制节点
- 链表:创建、清空、插入、添加、删除节点
- 带头结点的单链表head为空的判定条件---腾讯2014研发笔试卷
- 不带头结点的单链表的删除
- C语言实现单链表(不带头结点)节点的插入
- 带头节点循环单链表的操作(创建,保序插入,指定插入,删除指定表元,删除相同元素,统计某元素表元个数)
- jQuery删除和清空节点
- jQuery_删除及清空节点
- C语言实现单链表节点的删除(不带头结点)
- 带头结点的单链表和不带头结点的单链表的倒数第K个节点
- 单链表的创建、增加、删除、清空操作
- [cmake]如何设置Debug和Release编译模式
- MVC DropdownList 怎么绑定数据库中的值
- UVA 10006 Carmichael Numbers(数论+快速幂)
- XListView简单使用
- 使用jconsole远程监控linux下tomcat使用情况
- 带头结点的单链表的插入,删除,转置,清空,判断空,统计节点数目
- Linux ACL权限
- TCP-IP学习笔记(四)——概述
- 简易“三子棋”
- mysql timestamp 类型的特性以及实践总结
- java 错误: 找不到符号遇到的几种情况
- C++学习笔记——多态性
- JAVA8 Lambda(1)
- GetCurrentTime()