(五)单链接表算法之逆序

(五)单链接表算法之逆序

思路分析代码实现

思路分析

 

  采用遍历+头插入。

  • 遍历链表;
  • 保存当前链表的后一个节点指针(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}
posted @ 2019-01-10 13:57  天星小苑  阅读(282)  评论(0编辑  收藏  举报