7.下面的算法是将双链表L就地逆转,即:逆转在原链表上进行,不允许重新构造链表。请将算法补充完整。(16分) void ReserveDL(DLinkList *&L) { DLinkList *p, *r; p=L->next; (1) while ( (2) ) { r=p->next; p->next=L->next; if (L->next!=NULL) (3) ; p->prior=L; L->next=p; (4) ; } }
时间: 2024-03-07 08:52:24 浏览: 65
void ReserveDL(DLinkList *&L)
{
DLinkList *p, *r;
p = L->next;
L->next = NULL; //(1)将原链表断开,以便重新连接
while (p != NULL) //(2)循环条件是p不为NULL
{
r = p->next; //(3)保存下一个节点,以便后续操作
p->next = L->next;
if (L->next != NULL)
{
L->next->prior = p;
}
L->next = p;
p->prior = L; //(4)连接已经逆转的部分和当前节点
p = r; //继续下一个节点的操作
}
}
阅读全文