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;

}

注:

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


  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值