扫码关注公众号

链表算法之双向链表
11-17
252观看
01

双向链表和双向循环链表的区别

双向链表:包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。双向循环链表:最后一个节点的next指向head,而head

来自:链表-双向链表
02

在有序双向链表中定位删除一个元素的平均时间复杂度为()?

正确答案是B链表只能顺序查找定位一个元素的时间为O(N),删除一个元素的时间为O(1)

来自:链表-双向链表
03

有一个双链表L,设计一个算法查找第一个值为x的节点,将其与后继结点进行交换

先找到第一个值为x的节点p,q指向其后继节点,如下图所示,本题时将节点p移到节点q之后,实现过程时先删除节点p,再将其插入节点q之后算法如下://有一个双链表L,设计一个算法查找第一个值为x的节点,将其与后继结点进行交换intswap(D_LinkList&L,ElemTypex){DNode*p=L.next,*q;while(p!=NULL&&p->data!=x)//遍历节点p=p->next;if(p==NULL)//未找到值未x的节点return0;else//找到值为x的节点p{q=p->next;//q指向p的后继if(q!=NULL)//节点p不是尾节点{p->prior->next=q;//删除pq->prior=p->prior;p->next=q->next;//将节点p插入q节点之后if(q->next!=NULL)q->next->prior=p;q->next=p;p->prior=q;return1;}else//节点p是尾节点,无法与后继节点交换return0;}}

来自:链表-双向链表
04

有一个双链表L,其中有n(n>=1)个数据节点,设计一个算法将所有节点逆置

采用头插法建表的思路,用p遍历所有数据节点,先将新表看成只有一个头节点的双链表,然后将每个节点p插入该双链表的前端。算法实现如下://有一个双链表L,其中有n(n>=1)个数据节点,设计一个算法将所有节点逆置voidReverse(DNode*&L){DNode*p=L->next,*q;L->next=NULL;while(p!=NULL)//遍历原双链表的所有数据节点{q=p->next;//用q临时保存节点p的后继节点p->next=L->next;//将节点p插入新链表的前端if(L->next!=NULL)L->next->prior=p;L->next=p;p->prior=L;p=q;//继续处理余下的节点}}

来自:链表-双向链表
课程
专栏
用 JAVA 实现双向链表
链表是一种数据结构
博客园
java
双向链表
Java 数据结构之双向链表
链表中的节点即指向前面或者后面节点
博客园
Java.双向链表
【校招VIP】Java 实现 双向链表
csdn
双向链表
数据结构-链表-双向链表
3专栏
1课程
4 试题