【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;
}
};
链表的直接插入:
情况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;
}
};
相关文章推荐
- LeetCode 21. Merge Two Sorted Lists 合并两个有序单链表 C++
- [LeetCode]83. Intersection of Two Lists两条单链表的交点
- leetcode- 215. Kth Largest Element in an Array(基于插入排序思想)
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】
- LeetCode Merge k Sorted Lists(有序单链表数组的合并)
- LeetCode—Merge Two Sorted Lists融合两个有序单链表
- leetcode Insertion Sort List(链表插入排序)
- 单链表实现插入排序
- 【LeetCode】2.Add Two Numbers两个单链表相加
- LeetCode 35 Search Insert Position(插入排序)
- 单链表插入排序(带头结点与不带头结点)
- leetcode——Insertion Sort List 对链表进行插入排序(AC)
- leetcode_160. Intersection of Two Linked Lists 找两个单链表的交集的起始位置
- LeetCode Insertion Sort List 链表的插入排序
- [C++]LeetCode: 126 Insertion Sort List (插入排序链表)
- [LeetCode] Partition List 分割单链表
- LeetCode 147 Insertion Sort List(链表插入排序)
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- 【leetcode】插入排序一个链表
- [LeetCode147]Insertion Sort List(链表插入排序)