if(sortedTail -> val <= base -> val){ // 顺序 sortedTail = sortedTail -> next; // sortedTail 后移一位 }else{ // 逆序 (此处也是关注重点) // pre处 是插入点(后插),需要循环找出来,因此 dummy 的重要性就体现出来了 // 毕竟在这个过程有一个极小的数,需要放在第一个位置,你怎么插? ListNode * pre = dummy; // 过滤掉比base小的,使用 pre -> next -> val 的值来过滤,这样就能求出 插入点 while(pre -> next -> val <= base -> val) pre = pre -> next; // 现在 pre 处就是插入点了(后插) // 插入三部曲,图示很清楚 sortedTail -> next = base -> next; base -> next = pre -> next; pre -> next = base; }
if(sortedTail -> val <= base -> val){ // 顺序 sortedTail = sortedTail -> next; // sortedTail 后移一位 }else{ // 逆序,执行 task 步骤 ListNode * pre = dummy; // 过滤掉比 base 小的值,pre就是插入的位置 while(pre -> next -> val <= base -> val) pre = pre -> next;
// 插入三部曲 sortedTail -> next = base -> next; base -> next = pre -> next; pre -> next = base; } // 注意:base总是 sortedTail的next,不能写成 base = base -> next base = sortedTail -> next; } // 去掉dummy,返回排序后的链表 return dummy -> next; } };