题目
是编写算法将带一单链表逆置,要求空间复杂度为 O ( 1 ) O(1) O(1)。
分析
单链表分为带头节点和不带头节点两种,逆置思路有两种,第一种是采用头插法重新建立新的单链表,该方法直接遍历链表,每次将当前结点添加到新链表的头部;第二种是通过该表*next
指针,定义三个指针*pre, *p, *r
,分别表示三个连续结点,将p->next
指向pre
,但同时p
的后继节点会断开,所以需要用r
保存其后继节点。
代码
下面分别展示带头节点的单链表和不带头节点的单链表,采用上述两种思路实现单链表逆置:
1. 带头结点单链表 ⟶ \longrightarrow ⟶头插法
void Reverse_1(LNode &L){
LNode *p;
p = L.next;
L.next = NULL;
while(p != NULL){
LNode *tmp;
tmp = p