校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 双向链表
题目

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

解答

先找到第一个值为x的节点p,q指向其后继节点,如下图所示,本题时将节点p移到节点q之后,实现过程时先删除节点p,再将其插入节点q之后

算法如下:

//有一个双链表L,设计一个算法查找第一个值为x的节点,将其与后继结点进行交换
int swap(D_LinkList& L, ElemType x)
{
DNode* p = L.next, * q;
while (p != NULL && p->data != x) //遍历节点
p = p->next;
if (p == NULL) //未找到值未x的节点
return 0;
else //找到值为x的节点p
{
q = p->next; //q指向p的后继
if (q != NULL) //节点p不是尾节点
{
p->prior->next = q; //删除p
q->prior = p->prior;
p->next = q->next; //将节点p插入q节点之后
if (q->next != NULL)
q->next->prior = p;
q->next = p;
p->prior = q;
return 1;
}
else //节点p是尾节点,无法与后继节点交换
return 0;
}
}


C 0条回复 评论

帖子还没人回复快来抢沙发