#include<cstdio>
#include<iostream>
using namespace std;
struct Node{//构建一个节点类
int data;//数据域
Node *next;//指针域
};
int len=0;//记录链表长度
Node *CreatLink(int LinkNumber,int data[]){//创建链表
if(LinkNumber<=0){//LinkNumber 节点数目
cout<<"创建链表节点数目小于1"<<endl;
}
Node *NewNode=new Node;//分配内存
NewNode->data=data[0];//数据域为零
NewNode->next=NULL;//指针域指向空
Node *Head,*pre;
Head=NewNode;
//单链表当前节点不储存先前节点的地址
//三个指针 NewNode创建新节点 Head指向头节点 pre指向先前节点
for(int i=1;i<=LinkNumber;++i){//
pre=NewNode;//将pre赋为当前节点
NewNode=new Node;//NewNode为新节点
pre->next=NewNode;//当前结点指向新节点
pre->data=data[i];//新节点赋值为data[i]
len++;
}
return Head;
}
bool Insert(Node *Head,int position,int data){//position 位置
//在Node链表的position处插入插入元素data
if(position==1){//在链表头部插入
Node *NewNode=new Node;//NewNode为要插入的当新点
NewNode->data=data;//为新节点赋值
NewNode->next=Head;//新节点指向头节点
Head=NewNode;//
}
else {//在指定位置插入
int cnt=1;//记录位置
Node *cur=Head; //当前节点cur 从头节点开始
while(cnt!=position-1){//cur循环到指定位置的前一节点
cnt++;
cur=cur->next;//cur赋为下一节点
}
Node *NewNode=new Node;//NewNode为要插入的新节点
NewNode->data=data;//为新节点赋值
if(cur->next!=NULL){//如果cur指向的下一节点非空
NewNode->next=cur->next;//新节点指向当前节点指向的节点
cur->next=NewNode;//当前节点指向新节点
}
else {//当前节点为尾节点
NewNode->next=NULL;//新节点为空
cur->next=NewNode;//当前节点指向新节点
}
}
return true;
}
bool Delete(Node *Head,int position){//在Node链表中删除位于position位置的节点
if(position==1){//删除头节点
Node *NewNode=Head;//新建NewNode节点=头节点
Head=NewNode->next;//头节点指向头节点指向的节点
delete NewNode;//删除NewNode节点
}
else if(position==len){//删除尾节点
int cnt=1;
Node *cur=Head;
while(cnt!=len-1){//cur循环到倒数第二个节点
cnt++;
cur=cur->next;
}
Node *Tail=cur->next;//Tail为尾节点
delete Tail;
cur->next=NULL;//cur指向空
}
else{//中间
int cnt=1;
Node *cur=Head;
while(cnt!=position-1){
cnt++;
cur=cur->next;
}
Node *NewNode=cur->next;//NewNode为要删除的节点
cur->next=NewNode->next;//cur指向删除节点指向的节点
delete NewNode; //删除
}
}
int main(){
return 0;
}
```
单链表C++
最新推荐文章于 2024-08-03 14:56:14 发布