C++链表的理解及创建链表(附源码)

链表:有两部分,一是数据域,二是指针域。指针指向下一个节点。

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;

}

注:

  • 函数参数没有使用引用,因为参数本来就是指针,所以不需要用,当然用也没有错;
  • 弄懂这两个函数,写其他基本操作应该问题不大了。


猜你喜欢

转载自blog.csdn.net/liunan199481/article/details/80230672