链表(二)

双向链表


 

双向链表结构与单链表类似,但是它的每个结点有两个指针,分别用来指向它的前驱结点(pre)和后继结点(next)。把它构造成双向循环链表时,从任意一个结点的方向出发都能访问整个链表。

除此之外,双向链表的操作与单链表相似,但在插入与删除结点时要注意指针的指向


1、双向链表的结点

1 class  Node
2 {
3     public:
4         int  data;
5         Node  *pre;    //前驱指针
6         Node  *next;    //后继指针
7 }

 

2、双向链表插入结点

1 //p为双向链表将要插入结点的前驱结点
 2 if( p->next ==NULL ){             //注意插入节点位置是否为末尾
 3       p->next = node;
 4       node->pre = p;
 5 }else{
 6       node->next = p->next;
 7       p->next->pre = node;
 8       p->next = node;
 9       node->pre = p;
10  }

3、双向链表删除结点

1 Node  *q = p->next;
2 if( q->next ==NULL ){     //注意删除节点位置是否为末尾
3       p->next = NULL;
4 }else{
5       p->next = q->next;
6       q->next->pre = p;
7 }
8 delete  q;
9 length--;

猜你喜欢

转载自www.cnblogs.com/flyingfishesss/p/12208893.html