循环链表
定义:将单链表的终端结点的指针由空指针改为指向头结点,这使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。
改进:用指向终端结点的尾指针代替头指针。这样查找开始结点和终端结点就都很方便,时间复杂度为O(1)。同时,合并两个链表也会变得更方便。
双向链表
定义: 在单链表的每个结点中,再设置一个指向其前驱结点的指针域,所以共有两个指针域.
typedef struct DulNode
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
} DulNode, *DuLinkList;
简单实现插入操作:
- s -> prior = p;
- s -> next = p -> next;
- p -> next ->prior = s;
- p -> next = s;
以上步骤顺序不可以颠倒,删除操作较为简单,不再赘述,但要记得脱钩之后要free该结点。