1.链表的种类
题中常考查以下两种:
上一讲我们学了无头单向非循环链表,这节,让我们看一下双向链表的操作吧~
2基本操作
1,定义双向链表
2,创建一个节点
3,初始化双链表
4,尾插一个节点
5打印双向链表
6尾删法
当然,在这个代码中,我们要考虑如果只有head的唯一一个节点,那我们可以检查一下,如果head->next==head,则就不尾删
代码实现:
7头插法
8 头删
void LTPopFront(LTNode* phead)
{
assert(phead);
assert(phead->next != head);
LTNode* first = phead->next;
LTNode* second = phead->next->next;
phead->next = second;
second->prev = phead;
free(first);
first = NULL;
}
9找到某个元素
10在pos位置前面插入
void LTInsert(LTNode* pos, LTDataType x)
{
assert(pos);
LTNode* posprev = pos->prev;
LTNode* newnode = CreateLTNode(x);
//posprev newnode pos
newnode->next = pos;
pos->prev = newnode;
newnode->prev = posprev;
posprev->next = newnode;
}
在这个代码中,如果pos是哨兵位,那么此代码相当于尾插
让我们画个图就理解了
11销毁双向链表
以上就是双向链表的知识点啦~
我们学完了顺序表和链表,为了方便学习,我们来比较一下两种表吧~
好啦~我们的知识分享就到这里了~