Sort a linked list using insertion sort.
本题采用的是新建一个头结点,向新建的头结点中插入新的元素
功能测试用例:{ 0, 2, 5, 3, 6, 10}
特殊输入测试用例:NULL, {0}
class Solution
{
public:
ListNode *insertionSortList(ListNode *head)
{
if (head == NULL || head->next == NULL)
return head;
ListNode *LNpPoint1, *LNpPoint2, *LNpHead = (ListNode *)malloc(sizeof(ListNode));//在头结点前加一个结点
LNpHead->next = head;
head = head->next;
LNpHead->next->next = NULL;
while (head != NULL)//遍历所有结点
{
LNpPoint1 = LNpHead;//初始化双结点
LNpPoint2 = LNpHead->next;
while (LNpPoint2 != NULL)//在排好的链表中找到正确的位置
{
if (LNpPoint2->val > head->val)
{
LNpPoint1->next = head;
head = head->next;
LNpPoint1->next->next = LNpPoint2;
break;
}
LNpPoint1 = LNpPoint1->next;//双链表向后移动
LNpPoint2 = LNpPoint2->next;
}
if (LNpPoint2 == NULL)
{
LNpPoint1->next = head;
head = head->next;
LNpPoint1->next->next = NULL;
}
}
return LNpHead->next;
}
};