链表:有两部分,一是数据域,二是指针域。指针指向下一个节点。
typedef struct Lnode{
int data;
Lnode *next;
}*Linklist;
对于初学者可能不太懂这段代码,它等价于:
struct Lnode{
int data;
Lnode *next;
};
typedef struct Lnode* Linklist;
就是说定义了一个链表节点的结构体,再把Lnode*取一个别名叫Linklist,这样我们以后直接用Linklist定义变量,这个变量就是指向链表节点的指针变量。
有了这些基础知识就可以码代码了,废话不多说,上代码(有注释哟):
#include<iostream>
using namespace std;
typedef struct Lnode{
int data;
Lnode *next;
}*Linklist;
void creatList(Linklist L, int length){//创建一个长度为length的链表,头结点不算
int i=0;
Linklist p1,p2;
p1=p2=L;
while(i<length){//尾插法,就是说在尾部加新节点
p1=new Lnode;
p1->data=i+1;
p2->next=p1;
p2=p1;
++i;
}
p2->next=nullptr;//最后一个节点的指针域赋空指针
}
void delnode(Linklist L){//删除所创建链表的所有节点,包括头指针
Linklist tmp,p;
p=tmp=L;
while(p->next){//删除当前节点之前,要保存下一个节点的指针,这样才不会断链
tmp=p->next;
delete p;
p=tmp;
}
delete p;
}
int main(){
Linklist L=new Lnode;//L是指向头结点的指针,这几句都是创建一个头结点
L->data=0;
L->next=nullptr;
creatList(L,4);//创建一个长度为4的链表,数据域分别为1,2,3,4,头结点另算
Linklist p;
p=L;
while(p->next){//从头结点开始打印节点的数据域
cout<<p->data<<endl;
p=p->next;
}//打印出了最后一个的所有节点的数据域
cout<<p->data<<endl;//打印最后一个节点的数据域
delnode(L);
return 0;
}
注:
- 函数参数没有使用引用,因为参数本来就是指针,所以不需要用,当然用也没有错;
- 弄懂这两个函数,写其他基本操作应该问题不大了。