双向循环链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

先定义一个数据结构:

1 struct Date
2 {
3     int data;
4     struct Date *prior;
5     struct Date *next;
6 }Note;

1、插入操作

在平p、q间插入一个节点s.

主要完成两次握手:p和s,q和s;

(1)p和s的握手

p->next=s;
s->prior=p;

(2)s和q的握手

s->next=q;
q->prior=s;

原来的链接关系为p->next=q; q->prior=p;现在只知道p节点,且q=p->next;

因此,以上两次握手为:

             
s->prior=p;       //s的前驱为p
p->next->prior=s;//p的后继(即q)的前驱为s
s->next=p->next;//s的后继为p的后继(即q) p
->next=s; //p的next为s

2、删除操作

删除p、q间的s节点

s->prior->next=s->next;
s->next->prior=s->prior;
原文地址:https://www.cnblogs.com/flash610/p/3078140.html