试编写算法将头结点的单链表就地逆置,所谓“就地”是指辅助空间复杂度为O(1)。
算法思想:
将头结点摘下,将后面的结点按照头插法依次插入到头结点的后面,直到最后一个结点为止。
代码:
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList Reverse_1(LinkList L){
LNode *p, *r;
p = L->next;
L ->next = NULL; //头指针的next域置为NULL
while(p != NULL){ //依次将结点摘下
r = p ->next; //暂存p的后继
p ->next = L->next; //p插入到头结点之后
L ->next = p;
p = r; //p向后移
}
return L;
}