链表基本操作的函数实现。(1)
如下是一个模拟的链表的基本操作,主要有创建链表,连接链表,打印链表,删除链表等,后面有关链表的算法都依赖这个文件中函数实现。
ListCommon.h
//链表的结构
struct ListNode{
int m_nValue;
ListNode* m_pNext;
};
//通用的操作函数
ListNode* CreateListNode(int value);
void ConnectListNodes(ListNode* pCurrent, ListNode* pNext);
void PrintListNode(ListNode* pNode);
void PrintList(ListNode* pHead);
void DestoryList(ListNode* pHead);
//其中的参数是指向指针的指针,
void AddToTail(ListNode** pHead, int value);
void RemoveNode(ListNode** pHead, int value);
ListCommon.cpp
#include <iostream>
#include <stdlib.h>
#include "ListCommon.h"
using namespace std;
//链表的结构
//struct ListNode{
// int m_nValue;
// ListNode* m_pNext;
//};
//通用的操作函数
//创建链表节点
ListNode* CreateListNode(int value){
ListNode* pNode = new ListNode();
pNode->m_nValue = value;
pNode->m_pNext = NULL;
}
//连接两个链表节点
void ConnectListNodes(ListNode* pCurrent, ListNode* pNext){
if(pCurrent == NULL){
cout << "can not to connect two nodes ! " <<endl;
exit(1);
}
pCurrent->m_pNext = pNext;
}
//打印一个链表节点
void PrintListNode(ListNode* pNode){
if(pNode == NULL){
cout << "The node is NULL !" <<endl;
}else{
cout << "The value of node is " << pNode->m_nValue <<endl;
}
}
//打印整个链表,不要用pHead节点直接操作,否则操作结束这个链表就无法获取了。
void PrintList(ListNode* pHead){
cout << "print list begin ---" <<endl;
ListNode * pNode = pHead;
while(pNode != NULL){
cout << pNode->m_nValue<< endl;
pNode = pNode->m_pNext;
if(pNode == pHead){
break;
}
}
cout << "print list end " <<endl;
}
//销毁链表
void DestoryList(ListNode* pHead){
ListNode* pNode = pHead;
while(pNode != NULL){
pHead = pHead->m_pNext;
delete pNode;
pNode = pHead;
}
}
//从尾部添加节点,其中的参数是指向指针的指针,因为这里的pHead值是可能会变化的。
void AddToTail(ListNode** pHead, int value){
ListNode* pNew = new ListNode();
pNew->m_nValue = value;
pNew->m_pNext = NULL;
//空链表,这时头指针就被改变了,确切说是头指针指向的内容被改变了,也即是说这里需要指针指向的内容,所以用了指向指针的指针。
if(*pHead == NULL){
*pHead = pNew;
}else{
ListNode* pNode = *pHead;
while(pNode != NULL){
pNode = pNode->m_pNext;
}
pNode->m_pNext = pNew;
}
}
//删除节点
void RemoveNode(ListNode** pHead, int value){
if(pHead == NULL || *pHead == NULL){
return;
}
ListNode* pToBeDeleted = NULL;
if((*pHead)->m_nValue == value){
pToBeDeleted = *pHead;
*pHead = (*pHead)->m_pNext;
}else{
ListNode* pNode = *pHead;
while(pNode->m_pNext !=NULL && pNode->m_pNext->m_nValue !=value){
pNode = pNode->m_pNext;
}
if(pNode->m_pNext !=NULL && pNode->m_pNext->m_nValue == value){
pToBeDeleted = pNode->m_pNext;
pNode->m_pNext = pNode->m_pNext->m_pNext;
}
}
if(pToBeDeleted != NULL){
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}
链表基本操作的函数实现。(1)相关推荐
- 数据结构 【实验3 链表基本操作】
实验3 链表基本操作 实验目的 1. 定义单链表的结点类型. 2. 熟悉对单链表的一些基本操作和具体的函数定义. 3. 通过单链表的定义掌握线性表的链式存储结构的特点. 4. 掌握循环链表和 ...
- 搬砖:数据结构之链表基本操作总结
数据结构之链表基本操作总结 2017年05月11日 18:22:11 Lily_whl 阅读数:19151 https://blog.csdn.net/Lily_whl/article/details ...
- 237删除链表中的节点(单链表基本操作)
1.题目描述 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 说明: 链表至少包含两个节点. 链表中所有节点的值都是唯一的. 给定的节点为非末尾节点并且一定 ...
- C语言单链表基本操作总结
C语言单链表基本操作 本文是参考他人实现的C语言单链表,对多篇博文整理的结果,仅作为学习笔记.文末有参考出处. 1.单链表定义 链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单 ...
- 数据结构之链表基本操作
数据结构:单链表基本操作 单链表学习:参考数据结构:单链表基本操作 涉及到单链表的基本操作有如下: int initList(linkList *); //初始化一个单链表,具有头指针,头结点,头结点 ...
- 【数据结构|链表】单链表基本操作
文章目录 一.链表 二.链表分类 三.单链表基本操作 3.1 单链表存储结构Init 3.2 遍历链表visitlist函数 3.3 求表长length 3.4 查找listfind ...
- 单链表基本操作的实现
单链表基本操作的实现 [PS]: 由于笔者的能力水平有限,如果遇到相关错误或者存在歧义的地方,欢迎在下方评论区留言联系笔者,如果你觉得这篇文章对你有帮助,那么不妨动动你的小手点赞收藏转发,让更多的人看 ...
- C 语言单链表基本操作
复习下数据结构,使用 C 语言实现了带头节点的单链表.单链表基本操作有:节点初始化.链表初始化.插入节点.查找节点.删除节点和删除链表等.下面的程序中,list.h 为头文件, 其中包含了上述基本操作 ...
- 【Linux 内核 内存管理】RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )
文章目录 一.RCU 模式下更新链表项 list_replace_rcu 函数 二.链表操作时使用 smp_wmb() 函数保证代码执行顺序 一.RCU 模式下更新链表项 list_replace_r ...
最新文章
- 使用Intellij IDEA 解决Java8的数据流问题
- 关于poll机制应用及驱动
- 收藏 | 在算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?...
- RandomAccessFile类的简单介绍,以及代码演示
- java 蓝桥杯算法训练 sign函数
- Julia : Array !, [1,2] !=[1 2]'
- 喜报!木兰宽松许可证通过OSI认证,成为首个中英双语国际开源许可证!
- android 经纬度距离计算器,经纬度距离角度计算软件|经纬度距离角度计算器(geography) v2.0免费版_星星软件园...
- android的事件处理和传递机制实例
- 工业机器人编程调试怎么学
- 学习计算机视觉,你必须了解的基础概念
- 机房常用动力环境设备远程集中监控及告警方案
- 网络流量大数据分析平台(2)
- ZZULIOJ:1123:最佳校友
- 策略模式——实现促销活动
- js视频背景切换js特效代码
- 看不懂NFT,了解这几幅画就好了
- 电脑桌面便签如何设置每月提醒便签事项?
- 51单片机入门教程__矩阵键盘的使用
- 神州泰岳确认将获飞信合约 称续签只是时间问题