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;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode insertionSortList(ListNode head) {
    if(head==null) return head;
    ListNode h=new ListNode(-1000000); //加入头结点方面,特别适合头结点不断改变的情况,c++要释放掉,java直接返回头的next就可
    h.next=head;
  ListNode cur=head.next; //cur 保存当前处理的节点
  head.next=null; //别忘了,新链表的尾巴值为空
    while(cur!=null)
    {
        ListNode nextNode=cur.next; //保存下一个要处理的点,因为cur会被插入的新链表中,所以保存,然后赋给cur(最后一句)

        ListNode l=h.next;
        ListNode pre=h;
        while(l!=null) //找到合适的插入位置,找pre地址
        {
            if(l.val<=cur.val)
            {
                pre=l;
                l=l.next;
            }
            else
            {
                break;
            }
        }

        //insert into the list
        cur.next=pre.next;
        pre.next=cur;

        cur=nextNode;

    }

         return h.next;

    }

}

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

时间: 2024-08-27 08:44:37

insertion Sort List (链表的插入排序) leecode java的相关文章

[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

【数据结构】算法 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

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

Java for LeetCode 147 Insertion Sort List

Sort a linked list using insertion sort. 解题思路: 插入排序,JAVA实现如下: public ListNode insertionSortList(ListNode head) { if(head==null||head.next==null) return head; ListNode root=new ListNode(Integer.MIN_VALUE); root.next=head; head=head.next; root.next.nex

leetcode 链表 Insertion Sort List

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

折半插入排序(binary insertion sort)

折半插入排序(binary insertion sort)是对插入排序算法的一种改进,所谓排序算法过程,就是不断的依次将元素插入前面已排好序的序列中. 折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中.由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度.

【leetcode】Insertion Sort List (middle)

Sort a linked list using insertion sort. 思路: 用插入排序对链表排序.插入排序是指每次在一个排好序的链表中插入一个新的值. 注意:把排好序的部分和未排序的部分完全分开,指针不要有交叉. 即不会通过->next 重叠 class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head == NULL) return NULL; ListNode * ans = hea