已知p指向双向循环链表中的一个结点,其结点结构为data,prior,next三个域,写出算法chang(p),交换p所指向的结点及其前驱结点的顺序,并写出代码
时间: 2024-05-25 09:17:45 浏览: 54
算法:
1. 如果p指向链表中的头结点或尾结点,则无法交换,直接返回;
2. 否则,交换p结点和其前驱结点的顺序,即交换p的data和prior域,同时修改p和其前驱结点的next和prior指针指向。
代码:
void chang(node *p) {
if (p == NULL || p->prior == NULL || p->next == NULL) {
return;
}
node *pre = p->prior;
pre->next = p->next;
p->next->prior = pre;
p->next = pre;
p->prior = pre->prior;
pre->prior->next = p;
pre->prior = p;
return;
}
相关问题
已知p指向双向循环链表中的一个结点,其结点结构为data,prior,next三个域,写出算法chang(p),交换p所指向的结点及其前驱结点的顺序
算法如下:
1. 如果p为空或者p的前驱结点为空,则无法交换,直接返回。
2. 保存p的前驱结点pre,和p的后继结点next。
3. 如果pre的前驱结点为空,则说明p已经是链表的头结点,需要特殊处理。
4. 将pre的前驱结点的next指向p,将p的next指向pre的后继结点。
5. 如果next的后继结点为空,则说明p已经是链表的尾结点,需要特殊处理。
6. 将next的后继结点的prior指向pre,将pre的prior指向next。
7. 将p的prior指向pre的前驱结点,将pre的前驱结点的next指向p的前驱结点。
8. 返回交换完成后的链表头结点。
阅读全文