单链表实现增序排列

(c++/c)代码实现函数

void Sort(LinkNode *&L1) {
    LinkNode *p = L1->next->next, *s = p->next, *m; // p指向第二个数据结点
    L1->next->next = NULL; // L1只保留第一个结点,当成一个新表存储有序元素
    while (p != NULL) {
        m = L1; // m指向新链表
        while (m->next != NULL && m->next->data < p->data) {
            m = m->next; // 找到新链表中大于p值域的前一个结点
            // 循环结束时,m指向的结点就是p要插入的地方
        }
        p->next = m->next; // 将p结点插入m后
        m->next = p;
        
        p = s;
        if (s != NULL) { // 注意判断是否循环到最后一个结点
            s = p->next;
        }
    }
}

这个函数主要是L1靠m这个指针间接重新拼接,组成新的有序链表

m = L1; 
// 值得注意的是m是指向新链表的首元素,而不是将L1全部复制给m
//由于外层的while循环,使得m=L1一直执行,而m也在内层的while循环里不断重新变长,而最后通过m=L1
//将m继续指向L1这个位置,所以L1通过m间接重新增长,实现L1为一个有序链表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值