【链表】Insertion Sort List

题目:

Sort a linked list using insertion sort.

思路:

插入排序是一种O(n^2)复杂度的算法,基本想法相信大家都比较了解,就是每次循环找到一个元素在当前排好的结果中相对应的位置,然后插进去,经过n次迭代之后就得到排好序的结果了。了解了思路之后就是链表的基本操作了,搜索并进行相应的插入。时间复杂度是排序算法的O(n^2),空间复杂度是O(1)。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var insertionSortList = function(head) {
    if(head==null||head.next==null){
        return head;
    }

    var tempHead=new ListNode(0),p=head,tp=null;

    while(p!=null){
        tp=tempHead;
        while(tp.next!=null&&tp.next.val<p.val){
            tp=tp.next;
        }
        var tempNode1=tp.next;
        var tempNode2=p.next;
        tp.next=p;
        p.next=tempNode1;
        p=tempNode2;
    }

    return tempHead.next;
};
时间: 2024-10-25 14:59:14

【链表】Insertion Sort List的相关文章

leetcode 链表 Insertion Sort List

Insertion Sort List Total Accepted: 24444 Total Submissions: 96639My Submissions Sort a linked list using insertion sort. 题意:用插入排序对一个链表排序 思路: 插入排序对当前元素在前面已经排好的元素中找到一个位置把它插入 可以设置一个指向头节点的dummy元素,统一操作 注:链表中的交换节点操作,不能简单地只交换节点里的value,因为value有可能是很复杂的类,那样要调

Sort List &amp;&amp; Insertion Sort List (链表排序总结)

Sort List Sort a linked list in O(n log n) time using constant space complexity. Have you been asked this question in an interview?                   Yes               说明:归并排序: 时间 O(nlogn),空间 O(1). 每次将链表一分为二, 然后再合并.快排(用两个指针) /** * Definition for sing

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]85. Insertion Sort List链表插入排序

Sort a linked list using insertion sort. Subscribe to see which companies asked this question 解法:设置3个指针:应插入位置的前一个节点first.当前处理节点third和其前一个节点second,设置辅助节点help指向头节点.然后从头节点的next节点开始遍历,一个个插入正确位置即可.注意在插入到新位置之前需要链接好second和third->next,防止链表断开. /** * Definitio

insertion Sort List (链表的插入排序) leecode java

逻辑简单,代码难写,基础不劳,leecode写注释不能出现中文,太麻烦,我写了大量注释,链表问题最重要的就是你那个指针式干啥的 提交地址https://oj.leetcode.com/problems/insertion-sort-list/ /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; *

[C++]LeetCode: 126 Insertion Sort List (插入排序链表)

题目:Sort a linked list using insertion sort. 思路:题目要求我们用插入排序来实现链表排序.我们构建一个当前排好序的链表,然后维护一个变量,不断指向链表中的下一个节点.用变量cur表示当前要插入的节点,每次循环找到cur节点在当前排好序的链表中对应的位置,然后插入进去,然后指向原链表中下一个节点,继续进行插入过程,直到原链表的所有节点都完成,既经过N次迭代后,就得到了排序好的结果. 复杂度:时间O(N^2) 空间O(1) Attention: 1. 维护一

【LeetCode每天一题】Insertion Sort List(使用插入法对链表进行排序)

Sort a linked list using insertion sort. Example 1: Input: 4->2->1->3 Output: 1->2->3->4 Example 2: Input: -1->5->3->4->0 Output: -1->0->3->4->5 思路 这道题意思就是让你使用插入排序来对链表进行排序,根据插入排序在数组的思想,我们可以知道他是将数组分成两部分,排序好的,未排序的.我

Insertion Sort List(单链表插入排序)

来源:https://leetcode.com/problems/insertion-sort-list Sort a linked list using insertion sort. 方法: 1. 使用一个preHead指向头节点,这样在将节点插入头节点前面时(即某个节点值比头节点小)不需要进行特殊处理 2. 从头节点开始遍历,如果当前节点的下一个节点的值比当前节点的值大,就从头开始遍历找到第一个比当前节点的下一个节点的值大的节点,并插入到它的前面,注意插入时需要同时处理节点移出位置和插入位

[LeetCode]Insertion Sort

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