双向链表的定义及相关操作
2020-01-17 本文已影响0人
Jorunk
typedef struct DualNode
{
ElemType data;
struct DualNode *prior; //前驱结点
struct DualNode *next; //后继结点
} DualNode, *DuLinkList;
- 代码实现:
s->next = p;
s->prior = p->prior;
p->prior->next = s;
p->prior = s;
- 关键在于交换的过程中不要出现矛盾,例如第四步先被执行了,那么p->prior就会提前变成s,使得插入的工作出错。严重性打个比方就是打电话给老婆的时候不小心叫成小三的名字!
- 代码实现:
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
- 最后总结一下,双向链表相对于单链表来说,是要更复杂一点,每个结点多了一个prior指针,对于插入和删除操作的顺序大家要格外小心。