链表基本操作的函数实现。(1)
来源:互联网 发布:朝鲜留学生在中国 知乎 编辑:程序博客网 时间:2024/06/09 16:35
如下是一个模拟的链表的基本操作,主要有创建链表,连接链表,打印链表,删除链表等,后面有关链表的算法都依赖这个文件中函数实现。
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)
- 链表的基本操作函数算法(C/C++实现)
- 二叉链表的定义与基本操作实现函数
- 链表的基本操作实现
- 链表基本操作的实现
- 链表基本操作的实现
- 链表基本操作的实现
- c++实现链表的基本操作
- 双向链表的基本操作实现
- 链表基本操作的实现
- 链表基本操作的实现
- JAVA实现链表的基本操作
- 数据结构-链表的基本操作实现
- c++实现链表的基本操作
- c++实现链表的基本操作
- 静态链表的基本操作实现
- 静态链表的基本操作实现
- c++实现链栈的基本操作(附带main函数 可编译运行)
- git
- 2017年8月28日22:46:43
- Expect ssh免秘钥登入自动脚本(ssh-copy-id、expect免交互输入脚本)
- 01_SpringMVC流程架构图
- 常用的各种网络协议概念关系整理
- 链表基本操作的函数实现。(1)
- Rancher部署Træfik实现微服务的快速发现
- Linux软件自动化部署脚本
- Java常见异常总结
- getopt_long 函数详解
- 古文觀止卷八_送李愿歸盤谷序_韓愈
- sublime配置latex记录
- 网站架构学习(一)之架构演化
- java web div隐藏