1. 梗概:
1.1. 要求:
不使用新的单链表
1.2. 原理
- 头插法的特点是逻辑顺序与输入顺序相反
- 按原链表顺序一个个插入就行了
- 链表不会存在数据覆盖问题,只会覆盖地址域
- 头插法插入的时候,只需保存需要的地址就行了
1.3. 算法粗略设计
- 用探针来按原顺序读取链表
- 同时可以防止断开头插法对象节点后找不到后继所有节点
- 把探针作为头插法对象
2. c语言实现:
void ReverseList(LinkList L){
Node *p, *q;//p为头插法对象地址,q用来临时存对象下一个节点,且作为原链表的探针
p=L->next;//循环初始化,对应p=q
L->next=NULL;//循环初始化,对应L->next=p
while (p!=NULL){//判断有没有到链表尾
q=p->next;//临时保存后继
p->next=L->next;//头插法,接上后继
L->next=p;//头插法,断开,接上前驱
p=q;//后继为下一个头插法对象
}
}