单向链表的复杂操作

server/2024/9/25 23:18:56/

1、删除链表节点

int DeleteLinkList(LinkNode *pHead, DataType TmpData)
{LinkNode *pPreNode = NULL;LinkNode *pTmpNode = NULL;int cnt = 0;pPreNode = pHead;pTmpNode = pHead->pNext;while (pTmpNode != NULL){if (pTmpNode->Data == TmpData){//删除pPreNode->pNext = pTmpNode->pNext;free(pTmpNode);pTmpNode = pPreNode->pNext;cnt++;}else {pTmpNode = pTmpNode->pNext;pPreNode = pPreNode->pNext;}}return cnt;
}

2、销毁链表

int DestroyLinkList(LinkNode **ppHead)
{LinkNode *pTmpNode = NULL;LinkNode *pFreeNode = NULL;pTmpNode = pFreeNode = *ppHead;while (pTmpNode != NULL){pTmpNode = pTmpNode->pNext;free(pFreeNode);pFreeNode = pTmpNode;}*ppHead = NULL;return 0;
}

3、寻找链表的中间节点位置

LinkNode *FindMidLinkNode(LinkNode *pHead)
{LinkNode *pFast = NULL;LinkNode *pSlow = NULL;pFast = pSlow = pHead->pNext;while (pFast != NULL){pFast = pFast->pNext;if (NULL == pFast){break;}pFast = pFast->pNext;if (NULL == pFast){break;}pSlow = pSlow->pNext;}return pSlow;
}

功能:找到中间节点位置
算法原理:
快指针pFast每次走2步,慢指针pSlow每次走1步,快指针到达末尾时,慢指针所在的位置即为中间位置 。

4、寻找链表倒数第K个节点

LinkNode *FindLastKthLinkNode(LinkNode *pHead, int k)
{LinkNode *pFast = pHead->pNext;LinkNode *pSlow = pHead->pNext;int i = 0;for (i = 0; i < k; i++){pFast = pFast->pNext;if (NULL == pFast){break;}}if (NULL == pFast){return NULL;}while (pFast != NULL){pSlow = pSlow->pNext;pFast = pFast->pNext;}return pSlow;
}

功能:找到链表倒数第k个节点
算法原理:
快指针先走k步,慢指针和快指针每次走1步(快指针总是领先慢指针k步),当快指针走到末尾时,慢指针即指向链表倒数第k个节点 。

5、倒置链表

int ReversalLinkList(LinkNode *pHead)
{LinkNode *pTmpNode = NULL;LinkNode *pInsertNode = NULL;pTmpNode = pHead->pNext;pHead->pNext = NULL;pInsertNode = pTmpNode;while (pTmpNode != NULL){pTmpNode = pTmpNode->pNext;pInsertNode->pNext = pHead->pNext;pHead->pNext = pInsertNode;pInsertNode = pTmpNode;}return 0;
}

6、链表的冒泡排序 

int BubbleSortLinkList(LinkNode *pHead)
{   LinkNode *pTmpNode1 = NULL;LinkNode *pTmpNode2 = NULL;LinkNode *pEnd = NULL;DataType TmpData;//如果链表没有节点或者只有1个节点返回0 if (NULL == pHead->pNext || NULL == pHead->pNext->pNext){return 0;}while (1){pTmpNode1 = pHead->pNext;pTmpNode2 = pHead->pNext->pNext;if (pTmpNode2 == pEnd){break;}while (pTmpNode2 != pEnd){if (pTmpNode1->Data > pTmpNode2->Data){TmpData = pTmpNode1->Data;pTmpNode1->Data = pTmpNode2->Data;pTmpNode2->Data = TmpData;}pTmpNode1 = pTmpNode1->pNext;pTmpNode2 = pTmpNode2->pNext;}pEnd = pTmpNode1;}return 0;
}

7、链表的选择排序

//选择排序
int SelectSortLinkList(LinkNode *pHead)
{LinkNode *pTmpNode = NULL;LinkNode *pMinNode = NULL;LinkNode *pSwapNode = NULL;DataType TmpData;if (NULL == pHead->pNext){return 0;}pSwapNode = pHead->pNext;while (pSwapNode->pNext != NULL){pMinNode = pSwapNode;pTmpNode = pSwapNode->pNext;while (pTmpNode != NULL){if (pTmpNode->Data < pMinNode->Data){pMinNode = pTmpNode;}pTmpNode = pTmpNode->pNext;}if (pMinNode != pSwapNode){TmpData = pMinNode->Data;pMinNode->Data = pSwapNode->Data;pSwapNode->Data = TmpData;}pSwapNode = pSwapNode->pNext;} return 0;
}

http://www.ppmy.cn/server/107329.html

相关文章

EazyDraw for Mac 矢量图绘制设计软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

Objective-C 中的管道艺术:NSPipe 通信全解析

标题&#xff1a;Objective-C 中的管道艺术&#xff1a;NSPipe 通信全解析 在 Unix 和类 Unix 系统编程中&#xff0c;管道是一种常见的进程间通信&#xff08;IPC&#xff09;机制。而在 Objective-C 中&#xff0c;NSPipe 类提供了一种在应用程序内不同线程或进程之间进行通…

【苍穹外卖】Day2 员工接口 分类接口

1 新增员工 1.1 设计 前端表单&#xff1a; 路径&#xff1a;/admin/employee 方法&#xff1a;POST 本项目约定: 管理端发出的请求&#xff0c;统一使用 /admin 作为前缀 用户端发出的请求&#xff0c;统一使用 /user 作为前缀 存在数据库中的实体类对象&#xff1a; pac…

基于python的pytest单元测试框架

pytest单元测试框架 单元测试框架概念 单元测试是在软件开发中针对软件的最小单位,比如:函数,方法 进行正确性检查测试 单元测试框架作用 1 测试发现:从多个文件里面去找到我们的测试用例 2 测试执行:按照一定的顺序和规则去执行,并生成结果 3 测试判断:通过断言判断…

第五章 设置和其他常见活动 - 创建 IRIS 凭证集

文章目录 第五章 设置和其他常见活动 - 创建 IRIS 凭证集创建 IRIS 凭证集 第五章 设置和其他常见活动 - 创建 IRIS 凭证集 创建 IRIS 凭证集 要创建 IRIS 凭证集&#xff1a; 获取以下文件&#xff1a; 个人 X.509 证书&#xff0c;采用 PEM 编码的 X.509 格式。 这可以是…

搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

0x00 前言 由于此前从深交所下载的股票信息中只有行业门类信息&#xff0c;没有行业大类信息&#xff0c;导致后续解析三大报表和量化选股的时候无法进行&#xff1a; 可以看到深交所的股票是没有大类信息的。 再看看上交所的保险股&#xff1a; 因此需要将深交所股票的所属…

《黑神话:悟空》研发公司的薪资水平

作者&#xff1a;程序员晓凡 最近全网最火爆的要属《黑神话&#xff1a;悟空》了&#xff0c;即便是我这个平时不沾游戏、不追直播的人&#xff0c;也看直播看得津津有味。 一、销量与热度背后 首先&#xff0c;让我们来看看那些令人瞩目的数字。《黑神话&#xff1a;悟空》…

深度理解指针(3)

hello&#xff0c;各位小伙伴们在上期的最后我们了解到了指针数组&#xff0c;是用来存储指针的数组。这期我们将会学习深度理解指针&#xff08;3&#xff09;有关指针的内容&#xff0c;仍然与数组分不开&#xff0c;让我们踏上此次列车来进行新的旅途吧&#xff01; 目录 字…