不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作
来源:互联网 发布:淘宝图能放阿里上吗? 编辑:程序博客网 时间:2024/04/25 23:57
//不带头结点的单链表#include<stdio.h>#include<malloc.h>//链表结构体typedef struct _Node{int val;struct _Node* next;}Node,*LinkList;void InitList(LinkList* list){*list = NULL;}void InsertHeadList(LinkList* list){int data;scanf("%d", &data);while (data != 0){Node* node = (Node*)malloc(sizeof(Node));node->val = data;if (*list == NULL){*list = node;(*list)->next = NULL;}else{node->next = *list;*list = node;}scanf("%d", &data);}}void Print(LinkList list){Node* s = list;while (s != NULL){printf("%d ", s->val);s = s->next;}printf("\n");}void InsertTailList(LinkList* list){int data;scanf("%d", &data);while (data != 0){Node* node = (Node*)malloc(sizeof(Node));node->val = data;node->next = NULL;if (*list == NULL){*list = node;}else{Node* s = *list;while (s->next != NULL){s = s->next;}s->next = node;}scanf("%d", &data);}}void DeleteHeadList(LinkList* list){if (*list == NULL){return;}Node* s = *list;*list = (*list)->next;free(s);}void DeleteTailList(LinkList* list){if (*list == NULL){return;}Node* s = *list;if (s->next == NULL){DeleteHeadList(list);}while (s->next->next != NULL){s = s->next;}Node* r = s->next;s->next = s->next->next;free(r);}int Count(LinkList list){Node* s = list;int count = 0;while (s != NULL){s = s->next;count++;}return count;}bool IsEmpty(LinkList list){if (list != NULL){return false;}return true;}void Clear(LinkList* list){while (*list != NULL){DeleteHeadList(list);}}void Reverse(LinkList* list){if (*list == NULL || (*list)->next == NULL){return;}//三节点法Node* first;Node* second;Node* last;first = *list;second = (*list)->next;last = second->next;first->next = NULL;//如果有三个节点以上开始转置while (last != NULL){//连接second->next = first;//后移first = second;second = last;last = last->next;}second->next = first;*list = second;}int main(void){LinkList list;//初始化InitList(&list);//插入//头插//InsertHeadList(&list);//尾插InsertTailList(&list);//统计节点个数int ncount = Count(list);printf("ncount=%d\n", ncount);//单链表原地转置Reverse(&list);//打印Print(list);//删除//头删DeleteHeadList(&list);//尾删DeleteTailList(&list);Print(list);//判断是否为空bool temp = IsEmpty(list);if (temp){printf("空\n");}else{printf("不是空\n");}//清空Clear(&list);temp = IsEmpty(list);if (temp){printf("空\n");}else{printf("不是空\n");}return 0;}
阅读全文
0 0
- 不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作
- 带头结点的单链表的插入,删除,转置,清空,判断空,统计节点数目
- C语言实现双向非循环链表(不带头结点)的清空
- 不带头结点的单链表删除任意一个节点
- 不带头结点的单链表插入操作隐含的错误、、
- 不带头结点的单链表的删除
- C++中链表的创建、输出、节点删除、节点插入、翻转、清空
- 数据结构链表的操作集合(建立,遍历,插入,删除,排序,长度,空判断等)
- 不带头结点的单链表操作
- C语言实现单链表(不带头结点)节点的插入
- 带头结点的单链表和不带头结点的单链表的倒数第K个节点
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)(转)
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等) 【转】
- C语言实现单链表的节点插入(带头结点)
- C语言实现单链表节点的删除(不带头结点)
- 求不带头结点的单链表的节点的个数
- 单链表的创建、增加、删除、清空操作
- C语言实现单链表节点的删除(带头结点)
- 7.13 模拟赛
- js中Boolean对象
- JQuery详细教程六之测试实例
- Jmeter组件执行顺序与作用域
- RabbitMQ学习(2) --RabbitMQ HelloWorld(Python)
- 不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作
- L1-012. 计算指数
- sql的执行顺序
- Popwindow的使用
- python opencv 图像尺寸变换
- 阿里巴巴-菜鸟网络-集成中间件团队招聘,A轮,空间巨大
- 2016~2017
- java线程池的四种创建方式
- 全排列的实现