单链表处理

简介: 随便写了点,写得不好,遗忘的时候,回来看看: #include <iostream> using namespace std; typedef struct Node { int age; Node *pNext; }ListNode, *LinkList; //链表处理函数 LinkList CreateLinkList(); void A

随便写了点,写得不好,遗忘的时候,回来看看:

#include <iostream> using namespace std; typedef struct Node { int age; Node *pNext; }ListNode, *LinkList; //链表处理函数 LinkList CreateLinkList(); void Append(LinkList const head, int data); //添加(至末尾) void Insert(LinkList const head, int data, int pos); //插入 void Delete(LinkList const head, int pos); //删除 void Print(LinkList const head); //输出 void ClearLinkList(LinkList head); //清空 int main(int argc, char *arv[]) { LinkList head = NULL; //每次都从head开始输出 cout << "输出创建前的表:" << endl; Print(head); head = CreateLinkList(); //输出 cout << "输出创建后的表:" << endl; Print(head); //添加(至末尾) for (int i = 1; i < 4; ++i) { Append(head, i); } //输出 cout << "输出添加3个元素后的表:" << endl; Print(head); //插入 Insert(head, 12, 2); //输出 cout << "输出在2号元素后插入数据12的表:" << endl; Print(head); //删除 Delete(head, 2); //输出 cout << "输出将2号元素删除后的表:" << endl; Print(head); //清空 ClearLinkList(head); head = NULL; //输出 cout << "Clear表:" << endl; Print(head); getchar(); return 0; } LinkList CreateLinkList() { ListNode *p; p = new ListNode; p->age = 0; p->pNext = NULL; return p; } void Append(LinkList const head, int data) { if (!head) { ClearLinkList(head);//链表若为空,则创建 } ListNode *pNode = new ListNode; pNode->age = data; pNode->pNext = NULL; ListNode *pEnd = NULL; pEnd = head; while (pEnd->pNext)//找到末节点 { pEnd = pEnd->pNext; } pEnd->pNext = pNode; } void Insert(LinkList const head, int data, int pos) { ListNode *p = head; if (!head) { return;//链表为空 } else { while(p->age != pos - 1) { p = p->pNext; if (!p) { return;//到了链表末端 } } //插入 ListNode *pNode = new ListNode; pNode->age = data; pNode->pNext = p->pNext; p->pNext = pNode; } } void Delete(LinkList const head, int pos) { ListNode *p = head; if (!head) { return; } else { while(p->age != pos - 1) { p = p->pNext; if (!p) { return;//末端 } } //删除 ListNode *pNode = p->pNext; p->pNext = pNode->pNext; delete pNode; } } void Print(LinkList const head) { if (!head) { cout << "LinkList is Null!" << endl; } else { ListNode *p = head; do { cout << p->age << endl; p = p->pNext; } while (p); } } void ClearLinkList(LinkList head) { if (!head) { return; } ListNode *pNode = NULL; ListNode *pNodeNext = NULL; pNode = head; do { pNodeNext = pNode->pNext; delete pNode; pNode = pNodeNext; } while (pNode); head = NULL; }

相关文章
|
7天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1175 3
|
6天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
860 12
|
16天前
|
人工智能 运维 安全
|
5天前
|
机器学习/深度学习 物联网
Wan2.2再次开源数字人:Animate-14B!一键实现电影角色替换和动作驱动
今天,通义万相的视频生成模型又又又开源了!Wan2.2系列模型家族新增数字人成员Wan2.2-Animate-14B。
453 10
|
7天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
331 0
|
14天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!