golang实现链表

golang链表demo

一、链表是什么

链表属于线性表,是一种由多个节点组成的结构,各个节点的内存地址不一定连续。除了头节点和尾节点外,每个节点中,除了自己的数据外,都保存着其他1-2个节点的地址。

二、常用链表的分类

1. 单向链表

在单向链表中,尾节点没有记录任何节点的地址,其余节点记录了下一个节点的地址。

如图是一个单向链表:
在这里插入图片描述

在这个单向链表中,d是尾节点,它没有记录任何节点的地址;a、b、c则都记录了自己后面一个节点的地址。

2. 双向链表

在双向链表中,尾节点记录了上一个节点的地址,头节点记录了下一个节点的地址;其余节点记录了前一个和后一个节点的地址。

如图是一个双向链表:
在这里插入图片描述
在这个双向链表中,a是头节点,它只记录了下一个节点的地址,d是尾节点,它只记录了上一个节点的地址;其余节点则记录了上下两个节点的地址。

3. 循环链表

循环链表并不独立于前面2种链表,它更像是它们的变种。循环链表指的是:尾节点中保存节点中某一个节点的地址,从而形成了一个环。例如,我们可以把上面的单向链表稍稍改造一下,让尾节点d中记录头节点a的地址:
在这里插入图片描述

当然,尾节点不一定非要记录头节点才叫循环链表,d中记录b、c节点,也算是循环链表。

三、对链表进行crud的方法

  1. 查询节点
    头节点的地址我们是知道的,顺着头节点,依次往下遍历即可

  2. 增加节点
    a. 在单向链表中,找到尾节点,直接在尾节点中保存新节点的地址即可。如下图:
    在这里插入图片描述

    b. 在双向链表中,找个ab两个节点(a在前,b在后),在新节点中保存a、b的地址并在b中把a的地址改成新节点,再在a中把c的地址改成新节点,即可。注意一定要先在新节点中保存b的地址,否则会导致b节点的地址丢失,进而导致链表数据丢失。如下图:
    在这里插入图片描述

  3. 删除节点:假设要在abc中,删除b节点
    a. 在单向链表中,把c的地址保存在a中,即可。如下图:
    在这里插入图片描述

    b. 在双向链表中,在c中把b的地址改成a的,再在a中把b的地址改为c的,即可。注意一定要先改c中的数据,否则会导致b节点的地址丢失,进而导致链表数据丢失。如下图:
    在这里插入图片描述

  4. 修改节点
    找到节点,修改数据即可

结语

数据结构和算法的demo及部分面试题的答案都在这里:https://github.com/Eleven9527/dataStructureAndAlgorithmLearning
专栏和项目都会陆续更新,路过的朋友帮忙star一下,不胜感激!
我是一名正在路上的程序员,希望与你一起攀登技术的高峰~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值