试编写算法将带头结点的单链表就地逆置,所谓"就地"是指辅助空间复杂度为O(1)。
首先令指针 p 指向单链表第一个元素所在的结点,即头结点的后继结点;然后将头结点的 next 指针置为 NULL。将后续元素使用头插法插入单链表,实现逆置。
LinkList Reverse(LinkList L){
LNode *p,*r;
p = L->next;
L->next = NULL;
while(p){
r = p->next;
p->next = L->next;
L->next = p;
p = r;
}
return L;
}