c++动态链表的操作步骤

来源:互联网 发布:大数据培训内容 编辑:程序博客网 时间:2024/06/16 16:28

一:以list类作为当前的指针空间

class list{
public:
int value;
list *next;
list(){
value=0; //创建list对象后自动执行
next=NULL;
}
};

二:head作为头指针,作用是为移动的指针定一个家,移动指针想回家时就可以通过head返回

list *head=NULL,
head=new list();
head->next=NULL; 
head->value=15;

三:可以使用循环语句为链表赋值

每次循环,curr都要了一个list类空间(curr=new list()),给curr的value值有位置存放

然后为curr指针value元素赋值

原先head->value=15,此时curr->next=head,那么0-15,新建立的节点放在了head的前面,以此类推


for(int i=0;i<10;i++){
curr=new list();
curr->value=i;
curr->next=head;
head=curr;
}


四:链表的插入操作

想一想:假如0-1-2-3这样分布,想把100插到1的后面

首先得把curr的位置返回到头指针head先,然后curr在0的位置,curr->next=1;

把已经赋值的curr链表移动到1的位置

给insert指针一个list空间

insertz的value指向100;

curr的next(下一节点)指向insert(100)------->0 ------ 1-----2------3,可以发现100后面没有链了,这样不符合链表的连续性,得把100后面的链链接到1上   

   |_100

那么此时把100的next(下一节点)指向1(即0的下一节点,执行完while循环的curr->next位置)就完成了,0           1-------2 ------3

curr=head; |_100_|

while(curr->value!=1){
curr=curr->next;
}

next=curr->next;

insert=new list();

insert->value=100;
curr->next=insert;
insert->next=next;
 
curr=head;
while(curr!=NULL){
cout<<curr->value<<endl;
curr=curr->next;
}


五:链表的删除工作

想象一下:0-1-2-3-4链表结构。删掉2

我们的目的是删除节点指针pre移动到1,curr可以指到3位置,也就是curr到了2位置,2->next=3;那么我门直接把1->next = 2->nextt,就可以把2的链表断掉

0-1-3-4

还是一样curr先回家,再去找朋友

循环结束pre移动到1位置,curr位于2位置

因为先前动态newl了一个空间,那么删除之后可不要给它成为宇宙垃圾,把它delete掉吧 curr(2);

pre(1)->next=curr->next(3)

 curr=head;
 while(curr->value!=2){
 pre=curr;  
 curr=curr->next; 
}

next=curr->next;
pre->next=next;
delete curr;



完整的代码如下:

#include<iostream>  

using namespace std;  
class list{
public:
int value;
list *next;
list(){
value=0;
next=NULL;
}
};


int main()
{
list *head=NULL,
*curr=NULL, //当前节点 
*insert=NULL, //插入节点 
*next=NULL, //后继节点 
*pre=NULL; //前驱节点 
head=new list();
head->next=NULL; 
head->value=15;
for(int i=0;i<10;i++){
curr=new list();
curr->value=i;
curr->next=head;//p的节点指向head,位于head前面 
head=curr; //然后p的地址给了head,然后head就成为了0,0位于首位 
}
curr=head; //回到初始位置 
while(curr->value!=5){//要插入5的后面 
curr=curr->next;
}

//插入操作 
next=curr->next;
insert=new list();
insert->value=100;
curr->next=insert;
insert->next=next;
 
curr=head; //curry已经到了100这了,然后是它回到初始位置 
while(curr!=NULL){
cout<<curr->value<<endl;
curr=curr->next;
}
//删掉8节点
curr=head;
while(curr->value!=8){
pre=curr; //跳出后pre位于删除元素前面 
curr=curr->next; 
}


next=curr->next;
pre->next=next;
delete curr; //节点删除后应释放 
curr=head;


cout<<"--------------分隔线-----------------------"<<endl ;
while(curr!=NULL){
cout<<curr->value<<endl;
curr=curr->next;

}
原创粉丝点击