(3)已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next这3个域,设计算法change(p),交换p所指向的结点及其前驱结点的顺序。用c语言完成
时间: 2024-05-26 21:12:56 浏览: 16
抱歉,我可以回答该问题。下面是C语言的实现代码:
void change(struct node *p) {
struct node *temp = p->prior;
p->prior = temp->prior;
temp->prior->next = p;
temp->prior = p;
p->next = temp;
temp->next = p->prior;
}
其中,struct node为双向循环链表的结点结构体,包含data、prior、next三个域。这段代码将p所指向的结点及其前驱结点交换顺序。
相关问题
(3)已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next这3个域,设计算法change(p),交换p所指向的结点及其前驱结点的顺序。
可以回答。
算法如下:
1. 判断p指向的结点是否是头结点,如果是则直接返回。
2. 交换p所指向的结点及其前驱结点的顺序,具体操作如下:
- 将p的前驱结点保存到temp中。
- 将p的前驱结点的前驱结点指向p。
- 将p的前驱结点的next指向p的next。
- 将p的next指向p的前驱结点。
- 将p的前驱结点指向p的next。
- 将p的next的前驱结点指向p的前驱结点。
- 将p指向p的前驱结点。
3. 返回操作完成后的p指针。
已知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. 返回交换完成后的链表头结点。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)