c语言单链表原地转置,不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作...
//不带头结点的单链表
#include
#include
//链表结构体
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;
}
c语言单链表原地转置,不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作...相关推荐
- 2.3 带头结点的单链表:理论+编程实战(C语言详细)
1.顺序存储:线性表/栈/队列:理论+C语言实现–详细 2.1 链式存储概述 和 2.2 线性表的链式存储–单链表(C语言详细实现) 文章目录 2.3 带头结点的单链表 1. 带头结点的单链表基本概念 ...
- java带头结点的单链表_自己实现集合框架 (五): 带头结点单链表的实现
这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...
- 【带头结点的单链表】
带头结点的单链表 前言 一.带头结点的单链表结构体设计 1. 带头结点的单链表 2. 结构体声明 二.函数实现 1. 初始化 2. 申请新节点 3. 头插 4. 尾插 5. 按位置插入 6. 头删 7 ...
- 单链表的创建(带头结点和不带头结点)
伪代码: 创建结点 创建头结点(单独定义一个结构体来保存单链表的首地址和尾地址还有链表的长度) 创建带头结点的单链表 注意:创建头结点中的首尾指针都要指空,长度等于0: 从终端接收数据 创建结点保存数 ...
- 建立带头结点的单链表
[问题描述] 设有头结点单链表,实现单链表建立算法. [输入形式] 第一行输入一个N(N大于等于1,小于1000): 第二行输入N个整数,以空格作为分隔,创建长度为N的单链表. [输出形式] 输出建立 ...
- C语言实现不带头结点的单链表逆置的三种方法
C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...
- C语言不带头结点的单链表
C语言不带头结点的单链表 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>typedef st ...
- c语言实现--不带头结点的单链表操作
1,不带头结点的单链表操作中,除了InitList(),GetElem(),ListInsert(),ListDelete()操作与带头结点的单链表有差别外,其它的操作基本上一样. 2,不带头结点单链 ...
- 【C语言】数据结构C语言版 实验3 带头结点的单链表
slnklist.h #include <stdio.h> #include <stdlib.h> /************************************* ...
- 【C语言】数据结构C语言版 实验2 不带头结点的单链表
运行环境:Dev-C++ vs2013可能不能运行 首先新建一个头文件slnklist.h #include <stdio.h> #include <stdlib.h> /** ...
最新文章
- 二十九、基本分页存储管理的基本概念
- 广东海洋大学体育馆管理系统 开发日记2
- 怎样用springboot开发cs_SpringBoot分布式任务中间件开发 附视频讲解 (手把手教你开发和使用中间件)...
- HDU多校5 - 6816 Boring Game(模拟)
- 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升 1
- MIPS 已死,转身投靠 RISC-V!
- 搭乘云原生与数据中台实践列车 通往数字化转型前沿之旅
- java我的世界混搭包_Minecraft辐射混搭包地图
- 多智能体协同视觉SLAM技术研究进展
- oracle 简版客户端instantclient使用 oledb ODAC组件使用
- Adobe Photoshop 中的魔棒工具
- 浅析精益生产中改善活动的8个步骤
- 北京家庭摇号积分计算方式
- unity获取obs虚拟摄像头
- 魔域充值卡表cq_card里chk_sum参数的算法
- 计算机无法添加无线网络,Win7电脑无法连接无线网络的原因和处理方法
- dos界面操作mysql讲解
- 协同过滤推荐之基于近邻协同过滤(一)
- SVM算法实现(一)
- 每日定时推送股票数据到表单搭建示例