147. 对链表进行插入排序 链表
2021-03-15 07:29
标签:break 一个 bsp lis rtl struct nod 大于 etc 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 示例 1: 输入: 4->2->1->3 输入: -1->5->3->4->0 来源:力扣(LeetCode) 一个指针指向当前已排序的最后一个位置,这里用的是head指针 147. 对链表进行插入排序 链表 标签:break 一个 bsp lis rtl struct nod 大于 etc 原文地址:https://www.cnblogs.com/xgbt/p/14009157.html
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
输出: 1->2->3->4
示例 2:
输出: -1->0->3->4->5
链接:https://leetcode-cn.com/problems/insertion-sort-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
另外一个指针pre,每次从表头循环,这里用的是表头指针
每次拿出未排序的节点,先和前驱比较,如果大于或者等于前驱,就不用排序了,直接进入下一次循环。
如果前驱小,则进入内层循环,依次和pre指针比较,插入对应位置即可。/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode* ret = new ListNode;
ret->next = head;
while (head && head->next) {
if (head->val next->val) {
head = head->next;
continue;
}
ListNode* pre = ret;
while (pre->next) {
if (pre->next->val > head->next->val) {
break;
}
pre = pre->next;
}
ListNode* cur = head->next;
head->next = cur->next;
cur->next = pre->next;
pre->next = cur;
}
return ret->next;
}
};
上一篇:Python爬虫实现翻译功能
下一篇:Python的三目运算符