试写一算法,对单链表就地逆置
第一个版本(头插法)
将原链表中的头结点和第一个元素节点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入这个新表的头部(即令每个插入的结点成为新的第一个元素结点)
这些笔记根据小破站上的一位up主(folk_and_star_me)的视频写的,如果大家觉得笔记看不好可以去在b站上看那个视频。
第二个版本(就地逆置)
“就地”是指辅助空间复杂度为O(1)。
LinkList Reverse_2(LinkList L)
{
LNode *pre,*p = L->next,*r = p->next;
p->next = NULL; //处理第一个节点
while(r != NULL) //r为空说明p是最后一个节点
{
pre = p;
p = r;
r = r->next;
p->next = pre; //指针反转
}
L->next = p; //处理最后一个指针
return L;
}
上述是本人学习后的经验,如有问题请大家多多指教。