1. 梗概:

1.1. 要求:

不使用新的单链表

1.2. 原理

  1. 头插法的特点是逻辑顺序与输入顺序相反
    1. 按原链表顺序一个个插入就行了
  2. 链表不会存在数据覆盖问题,只会覆盖地址域
    1. 头插法插入的时候,只需保存需要的地址就行了

1.3. 算法粗略设计

  1. 用探针来按原顺序读取链表
    1. 同时可以防止断开头插法对象节点后找不到后继所有节点
  2. 把探针作为头插法对象

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;//后继为下一个头插法对象
	}
}