#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if (head == NULL)
return head;
ListNode *pre = new ListNode(-1);
pre->next = head; // 新链表
ListNode *tail = head; // 有序链表(尾插)
ListNode *node = head->next; // 遍历无序链表
while (node != NULL)
{
// 无序第一个节点 小于 有序尾部最后节点(则从头比较)
if (node->val < tail->val)
{
ListNode *cur = pre->next; // 遍历有序链表
while (cur->next && node->val > cur->next->val)
{
cur = cur->next;
}
// 删除 node(无序链表)第一个节点
tail->next = node->next;
// 插入新节点
node->next = cur->next;
cur->next = node;
// 更新无序节点第一个节点
node = tail->next;
}
else
{
tail = tail->next;
node = tail->next;
}
}
return pre->next;
}
};
int main()
{
Solution s;
ListNode *head = new ListNode(-1), *q = head;
int data;
int cnt = 5;
while (cnt--)
{
cin >> data;
ListNode *p = new ListNode(data);
q->next = p;
q = q->next;
}
//ListNode *de = head->next;
//while (de != NULL)
//{
// cout << de->val << " ";
// de = de->next;
//}
//cout << endl;
ListNode *res = s.insertionSortList(head);
while (res != NULL)
{
cout << res->val << " ";
res = res->next;
}
cout << endl;
}