1 插入排序的变形
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* sortList(ListNode* head) {
if (head == NULL)
return NULL;
//p保存有序链表的头部位置 q保存有序链表的尾部位置 t指向未排序部分的开始位置
ListNode *p = head;
ListNode *q = head;
ListNode *t = head->next;
q->next = NULL;
//temp作为临时指针方便后面使用
ListNode *temp = NULL;
while (t)
{
//小于最小位置直接插入到链表头部
if (p->val >= t->val)
{
temp = t->next;
t->next = p;
p = t;
t = temp;
}
//大于最大位置插入到链表结尾
else if (q->val <= t->val)
{
temp = t->next;
q->next = t;
q = q->next;
q->next = NULL;
t = temp;
}
//在中间位置需要查找并插入
else
{
ListNode *m1 = p;
ListNode *m2 = p->next;
temp = t->next;
while (m2)
{
if (m2-&g