链表数据结构
typedef struct NODE{
int value;
struct NODE* Next;
}Node,*pNode;
单向链表结构简单,存储一个节点指针和数据类型。
链表常用操作
- 链表的创建
- 链表中增加节点
- 链表中删除节点
- 链表中插入节点
创建链表
pNode CreateList(){
pNode pHead=new Node; // pHead为哑节点,标记链表的起始位置
pHead->Next=NULL;
return pHead;
}
增加节点
/* 尾部添加 */
pNode ListAddTail(pNode pHead,int iData){
pNode pNodeTmp=pHead; // 临时节点存储头结点地址
pNode pNodeTail;
while(pNodeTmp!=NULL){
pNodeTail=pNodeTmp; // 遍历链表找到尾节点
pNodeTmp=pNodeTmp->Next;
}
pNode pNodeNew=new Node;
pNodeTail->Next=pNodeNew;
pNodeNew->value=iData;
pNodeNew->Next=NULL;
return pHead;
}
删除节点
/* 删除给定节点元素 */
void ListDelElem(pNode pHead,int iData){
if(pHead==Null) {cout<<"Head Point NULL!"<<endl; exit(0);}
pNode pNodeCurr=pHead; // 临时节点存储头结点地址
pNode pNodePre,pNodeTmp;
while(pNodeCurr!=NULL){
if(pNodeCurr->value==iData){ // 找到要删除的元素,Delete释放节点
pNodeTmp=pNodeCurr;
if(pNodeCurr==pHead->Next){ // 特殊处理1:要删除元素在第一个节点
pHead->Next=pNodeCurr->Next;
}else if(pNodeCurr->Next==NULL){ // 特殊处理2:要删除元素在第一个节点
pNodePre->Next=NULL;
}else{
pNodePre->Next=pNodeCurr->Next;
}
Delete pNodeTmp;
pNodeTmp=NULL;
}
pNodePre=pNodeCurr;
pNodeCurr=pNodeCurr->Next;
}
}
插入节点
/* 测试用例 */
#include <iostream>
using namespace std;
typedef struct NODE{
int value;
struct NODE* Next;
}Node,*pNode;
pNode ListCreate(){
pNode pHead=new Node;
pHead->Next=NULL;
return pHead;
}
pNode ListAddTail(pNode pHead,int iData){
pNode pNodeTmp=pHead;
pNode pNodeTail;
while(pNodeTmp!=NULL){
pNodeTail=pNodeTmp;
pNodeTmp=pNodeTmp->Next;
}
pNode pNodeNew=new Node;
pNodeTail->Next=pNodeNew;
pNodeNew->value=iData;
pNodeNew->Next=NULL;
return pHead;
}
int main(){
pNode pHead=ListCreate();
for(int i=0;i<10;i++){
ListAddTail(pHead,i);
}
pNode pNodeTmp=pHead->Next;
while(pNodeTmp!=NULL){
cout<<pNodeTmp->value<<endl;
pNodeTmp=pNodeTmp->Next;
}
system("pause");
return 0;
}