双循环链表实现原理

1. 定义链表数据结构

typedef struct tagListNode {
    struct tagListNode *next;
    struct tagListNode *prev;
} ListNode;

2. 定义链表结构

typedef struct {
    ListNode node;
    unsigned int count;
} List

3. 定义常用链表操作

// 链表初始化
#LIST_INIT(list) do { \
    ((List *)(list))->node.next = ((List *)(list))->node.prev = (&((List *)(list))->node);\
    (List *)list->count++; \
} while(0)
// 获取列表的跟节点
#define LIST_ROOT(list) (&((List *)list)->node)
// 判断列表是否为空
#define LIST_IS_EMPTY(list) (((List *)list)->count == 0)

4. 链表插入操作原理:

1) 设置插入节点的前驱和后继

2)设置指向节点的前驱和后继

node->prev = where->prev;
node->next = where;
where->prev = node;
node->prev->next = node;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值