(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为一个有序链表