您的位置:首页 > 其它

【leetcode】单链表的插入排序

2017-01-04 19:43 393 查看
单链表的直接插入排序排序思想跟数组的插入排序的思想是一样的。但是这里涉及到链表的插入删除等等,一些操作,实现起来还是稍微麻烦的。
链表的直接插入:
情况1:当前结点的值大于上一个结点的值,不用处理,直接去处理下一个结点;
情况2:当前结点的值小于第一个结点的值,将当前结点插入到链表的开始。



情况3:不满足上述两种情况的情况。也就是当前结点的值大于第一个结点的值,小于上一个结点的值时。



代码实现:

class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head==NULL)
return head;
ListNode* newHead = head;
ListNode* cur = head->next;
ListNode* prev = head;
while(cur)
{
if(cur->val >= prev->val)
{
cur = cur->next;
prev = prev->next;
}
else if(cur->val < newHead->val)
{
prev->next = cur->next;//移除结点cur
cur->next = newHead;//cur头插到链表中
newHead = cur;//改变排序链表的head
cur = prev->next;
}
else
{
head = newHead;
while(head->next->val < cur->val)//head对应的结点的值小于cur的值
{
head = head->next;
}
prev->next = cur->next;
cur->next = head->next;
head->next = cur;
cur = prev->next;
}
}
return newHead;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序 单链表