Rt-Thread之双向链表学习

一、定义链表节点数据类型

struct rt_list_node
{  struct rt_list_node *next; /* 指向后一个节点 */
 struct rt_list_node *prev; /* 指向前一个节点 */
 };
 typedef struct rt_list_node rt_list_t;

二、在双向链表头部插入一个节点

l指的是第一个节点,n指新插入的节点。
新插入节点的时候,新节点把两边都断开了联系,所以左右两边需要建立好连接。

先看右边

第一步、看的时候主要是看原来的图

l->next 就是node2, 因为要新插入一个, node2往后退
所以l->next->prev 就指向新插入的节点。
(node2的前一个是n)

第二步、原来的时候,l->next指的就是node2.

但是因为新插入一个,n节点取代了node2的位置,所以,为了连上2这条线,应该由n->next来指向
node 2。
(n的下一个是node2) 然后node2怎么表示呢?node2得看原来的指向
l->next就是node2

左边的话比较好理解

第三步

(l的下一个是n)

第四步

(n的前一个是l)

三、在双向链表尾部插入一个节点

先看左边

新插入节点,一个思想就是 (NODEn的下一个为N,N的上一个为NODEn)
问题是NODEn,在函数中我们是不能表述的,那么怎么办呢?
没错,在原来的链表中l->prev就是NODEn

第一步

l->prev->next 可以表示为 NODEn的下一个为N

第二步

n->prev = l->prev 等价于 n—>prev =NODEn 即 n的上一个为NODEn

右边同理

四、从双向链表删除一个节点

这里需要做的是:1.NODEl 的下一个NODE3 2.NODE3的上一个是NODE1
问题是 在函数形参里面,只有删除的节点的n 的参数
所以得用n节点来表示NODE1,
怎么表示呢?
n->prev 就是指 NODE1 。
所以 (NODEl 的下一个NODE3)用代码表示
n->prev->next = n->next
其余同理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值