【数据结构】算法 LinkList (Insertion Sort List 链表插入排序)

将一个单链表进行处理后,所得结果为一有序链表

Solution:

将原始链表逐个查询,插入新链表,在插入的同时对链表进行排序。时间复杂度O(n*n)

public ListNode insertionSortList(ListNode head) {

        ListNode dummy = new ListNode(0);

        while (head != null) {
            ListNode node = dummy;
            while (node.next != null && node.next.val < head.val) {
                node = node.next;
            }
            ListNode temp = head.next;
            head.next = node.next;
            node.next = head;
            head = temp;
        }

        return dummy.next;
    }

原文地址:https://www.cnblogs.com/dreamtaker/p/8519984.html

时间: 2024-08-01 20:15:17

【数据结构】算法 LinkList (Insertion Sort List 链表插入排序)的相关文章

[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

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

147 Insertion Sort List 链表插入排序

用插入排序对链表进行排序. 详见:https://leetcode.com/problems/insertion-sort-list/description/ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListN

Insertion Sort List 链表插入排序

地址:https://oj.leetcode.com/problems/insertion-sort-list/ public class Solution { public ListNode insertionSortList(ListNode head) { if(head==null || head.next ==null){ return head; } ListNode ans = new ListNode(head.val); ListNode pre = null; ListNod

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; *

程序算法艺术与实践经典排序算法之Insertion Sort

插入排序(Insertion Sort)的基本思想是每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. 基本思想与伪代码 经过j-1遍处理后,A[1..j-1]己排好序.第j遍处理仅将A[j]插入L[1..j-1]的适当位置,使得A[1..j]又是排好序的序列.要达到这个目的,我们可以用顺序比较的方法.首先比较A[j]和A[j-1],如果A[j-1]≤ A[j],则A[1..j]已排好序,第i遍处理就结束了:否则交换A[j]与A[j-1]的

【链表】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 Lis

排序算法一:插入排序(Insertion sort)

最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根据结果对算法性能有个直观了解.本篇先说插入排序(insertion sort). (一)算法实现 1 protected void sort(int[] toSort) { 2 if (toSort.length <= 1) { 3 return; 4 } 5 for (int i = 1; i <

【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; * } * }