LeetCode : Insertion Sort List
Insertion Sort List
Sort a linked list using insertion sort.
此题目的实现方式有很多,依照要求,我就写了插入排序吧。需要注意几点:
1、此题的head节点也是有val的。并不是不带数值的纯粹头结点。。这点题目没说明,需要注意
2、插入时候注意位置是不是头结点之前,即:是否有节点的数值比头结点数值更小
ListNode *insertionSortList(ListNode *head)
{
if(NULL == head)
{
return NULL;
}
ListNode *p = head;
ListNode *q = p->next;
while(q!=NULL)
{
if(q->val < p->val)
{
ListNode* pFront = head;
ListNode *pTmp = head;
//查找q应该插入的位置
while(pTmp->val < q->val)
{
pFront = pTmp;
pTmp = pTmp->next;
}
<span style="white-space:pre"> </span>//插入的位置在头结点之前
if(pTmp==head)
{
p->next = q->next;
q->next = head;
head = q;
q = p->next;
}
else
{
p->next = q->next;
q->next = pFront->next;
pFront->next = q;
q = p->next;
}
}
else
{
//p,q指针后移
p = q;
q = q->next;
}
}
return head;
}