链表基本操作的函数实现。(1)
2017-08-28 22:48
369 查看
如下是一个模拟的链表的基本操作,主要有创建链表,连接链表,打印链表,删除链表等,后面有关链表的算法都依赖这个文件中函数实现。
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 AddToTai
4000
l(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;
}
}
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 AddToTai
4000
l(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;
}
}
相关文章推荐
- 链表的基本操作函数算法(C/C++实现)
- 实现无头结点单链表的基本操作函数
- python数据结构之链表——基本操作实现
- 用递归实现对链表的基本操作
- 数据结构--单链表的基本操作(C语言实现)
- java模拟LinkedList实现双链表,完成基本操作
- 链表及其基本操作的JAVA实现。
- java实现链表基本操作
- 链表上的基本操作实现
- 单链表基本操作示例1[C语言实现]
- [数据结构与算法分析] 单链表基本操作的实现
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- C语言实现单链表——之基本操作1
- Java实现--链表基本操作
- 数据结构—链表-单链表基本操作实现
- 链表及其各种函数操作的实现方法
- 单链表 基本操作 的实现源码
- 链表的java实现以及基本的增加,删除,排序操作
- 将一个值插入到有序的单链表,实现插入、删除、输出等基本操作
- 单向链表基本操作(C语言实现)