LeetCode Insertion Sort List


class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if (head == NULL) return NULL;
ListNode* sorted_head = head;
ListNode* unsorted_head = head->next;
head->next = NULL;

ListNode* cur = unsorted_head;

while (cur != NULL) {
unsorted_head = cur->next;
cur->next = NULL;
sorted_head = insertNode(sorted_head, cur);
cur = unsorted_head;
}

return sorted_head;
}

ListNode* insertNode(ListNode* list, ListNode* node) {
if (list == NULL && node == NULL) return NULL;
if (node == NULL) return list;
if (list == NULL) return node;
ListNode* cur = list;
ListNode* pre = NULL;
while (cur != NULL && cur->val < node->val) {
pre = cur;
cur = cur->next;
}
if (pre == NULL) {
node->next = list;
return node;
} else {
node->next = pre->next;
pre->next = node;
return list;
}
}
};

感觉很简单,写起来又是这错那错

LeetCode Insertion Sort List,布布扣,bubuko.com

时间: 2024-12-25 04:24:26

LeetCode Insertion Sort List的相关文章

[leetcode]Insertion Sort List @ Python

原题地址:http://oj.leetcode.com/problems/insertion-sort-list/ 题意:对链表进行插入排序. 解题思路:首先来对插入排序有一个直观的认识,来自维基百科. 代码循环部分图示: 代码: class Solution: # @param head, a ListNode # @return a ListNode def insertionSortList(self, head): if not head: return head dummy = Lis

leetcode——Insertion Sort List 对链表进行插入排序(AC)

Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *result; result->val = INT_MIN; result->next = NULL; ListNode *cur=head,*

LeetCode :: Insertion Sort List [详细分析]

Sort a linked list using insertion sort. 仍然是一个非常简洁的题目,让我们用插入排序给链表排序:这里说到插入排序,可以来回顾一下, 最基本的入门排序算法,就是插入排序了:时间复杂度为n^2,最基本的插入排序是基于数组实现的,下面给出基于数组实现的插入排序,来体会一个插入排序的思想: 以下仅为数组实现,不是解题代码,没兴趣可以跳过. void insertionsort (int a[], int N) { for (int i = 1; i < N; i+

LeetCode: Insertion Sort List [147]

[题目] Sort a linked list using insertion sort. [题意] 用插入排序方法排序链表 [思路] 直接搞 [代码] /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode

[LeetCode]Insertion Sort

Sort a linked list using insertion sort. 这道题是要求用插入排序的方式对单链表进行排序. 先不考虑边界情况: 1. 将第一个结点看做有序区,之后的所有结点看做无序区. 2. 从第二个结点p开始,遍历有序区,知道遇到比结点p值大的结点q,将结点p插入到结点q之前. 3. 重复上述步骤直到链表遍历结束. 需要注意的是: 1. 遍历无序区时,需要保存当前结点的后继结点,以防指针丢失. 2. 若原链表为空,则直接返回NULL. 下面贴上代码: /** * Defi

LeetCode Insertion Sort List 链表插入排序

题意:给一个链表,实现插入排序. 思路:O(1)空间,O(n*n)复杂度.将排好的用另一个链表头串起来,那个链表头最后删掉,再返回链表. 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 pub

【LeetCode】Insertion Sort List

题目 Sort a linked list using insertion sort. 解答 链表无法像数组那样从后往前依次比较插入,只能从前往后:在链表首部添加一个哨兵可以稍微简化下代码,代码如下: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * }

【leetcode刷题笔记】Insertion Sort List

Sort a linked list using insertion sort. 题解:实现链表的插入排序. 要注意的地方就是,处理链表插入的时候尽量往当前游标的后面插入,而不要往前面插入,后者非常麻烦.所以每次利用kepeler.next.val和head.val比较大小,而不是kepeler.val和head.val比较大小,因为如果用后者,要把head指向的节点插入到kepeler指向的节点的前面,如果kepeler指向的节点是头结点,就更麻烦了. 代码如下: 1 /** 2 * Defi

leetcode 147. Insertion Sort List (Python版)

题目: Sort a linked list using insertion sort. 大意是要实现一个链表的插入排序 算法思路:     从原链表中逐个弹出一个node 对于每一个node用插入排序的思想插入新的升序排列的链表中 这里有一个小trick,leetcode有一组数据是1~4999的升序序列,如果我们采用如上方法会超时 于是我们在插入排序的时候设置一个last位,记录当前插入的位置 在下一次插入的时候与上次插入位置last比较,如果当前node.val > last.val,那么