码迷,mamicode.com
首页 > 移动开发 > 详细

链表插入排序——单指针移动

时间:2019-08-09 13:24:39      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:head   插入排序   ext   nod   数据   插入数据   交换   指针   div   

前面分享了双指针移动实现插入排序,第一个指针pre的作用是为了插入数据节点,第二个指针prel作用是和待插入的数据节点进行比较,今天分享只用一个指针实现链表的插入排序。

需要注意的只有一点指针必须在比较的数据节点之前,这样才能实现交换内存地址,从而实现插入功能。

关于图,请大家看前面的双指针实现链表插入排序的博文,只需要将prel这个指针删除掉就行

直接分享核心代码

node *q,*p, *pre;  //q指针指向待插入的数据节点,pre指向被比较的数据节点前面一个节点
    q = head->next->next; //q指向第二个数据节点,实现将一个链表拆分成两个链表
    head->next->next = NULL;//实现拆分成两个链表
    while (q != NULL)  //循环条件,当没有数据节点需要插入为止
    {
        p = q->next;  //将下一个待插入的数据节点的地址给p
        pre = head;  //pre指向头节点
        while (pre->next !=NULL && pre->next->a < q->a)//两个条件:第一个条件如果不成立说明待插入的数最大,这时候pre指向最后一个数据节点。第二个条件不成立,说明待插入的数据比被比较的数据小,应该插入到被比较的节点的前面,这时候pre指向数据节点的前面一个节点
            pre = pre->next; //满足两个条件就继续移动pre指向下一个数据节点继续和待插入节点比较
        q->next = pre->next;//下面两行实现节点的插入
        pre->next = q;
        q = p;  //通过p让q指向下一个数据节点继续插入
    }

 

链表插入排序——单指针移动

标签:head   插入排序   ext   nod   数据   插入数据   交换   指针   div   

原文地址:https://www.cnblogs.com/hzb1224/p/11326323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!