这个是一个简单的创建单链表的方法,以int数据类型为例。
no:用于存储int类的数据,int可以换成其他的类型或者自己定义的结构体,都是可以的,主要作用也就是储存数据罢了。
代码中使用的是尾插入,就是将输入的数插入到链表末尾,听上去是按顺序输入,但是作为中介的head此时位于链表末尾,直接输出不太方便。所以在linklist中多加入了first指针,指向链表的第一个输入的数,输出时从first所指数据依次输出即可,下面也会演示。
另外有一种头输入方式头插入简单易懂,基本上看一眼就知道,但是存在一个问题,即使使用了first指针也没办法顺序输出。是否为逆序输出还没证明,等到证明了再写进来。
#inclued <iostream>
using namespace std;
class node{//定义节点类,用结构体写也可以
public:
int no;
node* next;//定义指针指向下一个node节点
};
class linklist{
public:
linklist(int n);//创建n长度的链表(尾插入)
~linklist();//析构函数,在程序结束时自动执行
void display();//输出链表,用于检测
private:
node* head;//头指针
node* first;//指向链表的第一个节点,方便输出
};
linklist::linklist(int n){//尾插入
head=new node;
cin>>head->no;
first=head;//建立指向首个输入数据的地址
head->next=NULL;
for(int i=0;i<n-1;i++){
node* s=new node;
cin>>s->no;
head->next=s;
head=s;
}
}
linklist::~linklist(){
node*p=first;
while(p!=NULL){
node*q=p;
p=p->next;
delete q;
}
}
void linklist::display(){
node* p=first;
while(p->next!=NULL){
p=p->next;
cout<<p->no<<endl;
}
}
int main(){
linklist link(5);
linklist.display();
return 0
}
以下是未写在上面的头插入
linklist::linklist1(int n){
head=new node;
head->next=NULL;
for(int i=0;i<n;i++){
node* s=new node;
cin>>s->no;
if(i==0) first->next=s;
s->next=head->next;
head->next=s;
}
}
博客介绍了简单的创建单链表的方法,以int数据类型为例,可替换为其他类型或自定义结构体。采用尾插入法,为方便输出加入first指针。还提及头插入法简单但顺序输出有问题,后续待证明逆序输出情况。
4735

被折叠的 条评论
为什么被折叠?



