首先看看双向链表的抽象数据类型,其中包括了两个指针域
其中prior是用来指向前一个节点,next用来指向后一个节点
void reverseDuLinkList(DuLinkList L) { // Add your code here
if (L == NULL)
return;
DuLinkList p, r, head;
h = L->next;
if (h && h->next) //头节点的下一个结点存在且存在大于一个的节点(除头节点)
{
p = h; //p指向h
r = p->next; //r指向p的后继节点
p->next = NULL; //给p的后继赋空,当逆置结束后,p将会是逆置后的最后一个节点,所以后继为NULL
while (r) //将p后继的节点依次取出放到h的前驱
{
prior = r;
p->next = h;
r = r->next;
h->prior = p;
h = p;
}
L->next = h; //头节点指向后继节点h
h->prior = L; //h前驱指向头节点
}
}
大家可以尝试着画一张简单的双链表带多个节点图,自己顺着代码逻辑画一遍,就能知道大概是什么意思了。