3.编写算法逆置一个带头结点的双链表。
时间: 2024-04-06 22:12:37 浏览: 73
反转带头结点的链表(4种方法)
1. 判断双链表是否为空,如果为空则直接返回头结点
2. 初始化3个指针pre、p、q,分别指向头结点、第一个节点、第二个节点
3. 将pre的next指向NULL,p的next指向NULL,p的prev指向NULL
4. 循环遍历链表,直到q指向NULL
5. 将p的prev指向q,q的next指向p,p、q向前移动一个节点
6. 将p的next指向pre,pre的prev指向p,pre向前移动一个节点
7. 将头结点的next指向pre,pre的prev指向头结点
8. 返回头结点
算法实现如下:
```
void reverseList(DLinkedList head)
{
if(head == NULL || head->next == NULL)
return;
DLinkedList pre = head, p = pre->next, q = p->next;
pre->next = NULL;
p->prev = NULL;
while(q != NULL)
{
p->next = pre;
pre->prev = p;
pre = p;
p = q;
q = q->next;
}
p->next = pre;
pre->prev = p;
head->next = p;
p->prev = head;
}
```
阅读全文