(五)单链接表算法之逆序
(五)单链接表算法之逆序
思路分析
![](https://img-blog.csdnimg.cn/20190110132010184.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l3eDEyM18=,size_16,color_FFFFFF,t_70)
采用遍历+头插入。
- 遍历链表;
- 保存当前链表的后一个节点指针(pBack);
- 头插入之尾部链接;
- 头插入之头部链接
- 移动到下一节点p = pBack;
代码实现
1void reverse_list(struct node *pH)
2{
3 struct node *p = pH -> pNext; //p指向第一个有效节点
4 struct node *pBack = NULL; //pBack 保存当前节点的后一节点
5 //当链表没有有效节点或者只有一个有效节点时,逆序不用操作
6 if((NULL == p)||(NULL == p -> pNext))
7 {
8 return;
9 }
10 while(NULL != p ->pNext)
11 {
12 pBack = p -> pNext; //保存当前节点的后一节点
13 if(p == pH -> pNext) //p为原链表的第一个有效节点
14 {
15 p -> pNext = NULL; //头插入之尾部链接,将NULL插入到第一个节点
16 pH -> pNext = p; //头插入之头部链接
17 }
18 else
19 {
20 p -> pNext = pH -> pNext; //头插入之尾部链接
21 pH -> pNext = p; //头插入之头部链接
22 }
23 //pH -> pNext = p; //头插入之头部链接
24
25 p = pBack; //指针p走到下一节点
26 }
27 insert_head(pH,p); //最后一个节点p->pNext =NULL 所以需要手动插入
28}