每日一道Leetcode(11.20)——对链表进行插入排序

本文详细介绍了两种不同的链表插入排序算法实现,一种是通过新建链表逐个插入,另一种是使用哑节点作为头节点进行原地排序。这两种方法都确保了链表元素按升序排列。同时,代码中展示了具体的插入操作,并提供了官方题解作为参考,帮助理解链表排序的逻辑。
摘要由CSDN通过智能技术生成

题目:
在这里插入图片描述
我的解法:
新建一个链表,遍历原来的链表,为每一个结点寻找在新链表中的插入位置,最终返回新链表。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode insertionSortList(ListNode head) {
        ListNode insert_node = new ListNode(Integer.MIN_VALUE);
        ListNode no_insert_node = head;
        while(no_insert_node!=null){
            ListNode temp = no_insert_node.next;
            no_insert_node.next = null;
            insert(insert_node, no_insert_node);
            no_insert_node = temp;
        }
        return insert_node.next;

    }

    public void insert(ListNode m, ListNode n){
        ListNode in = m;
        while(in!=null && in.next!=null){
            if(in.val<=n.val && in.next.val>=n.val){
                ListNode temp = in.next;
                in.next = n;
                in.next.next = temp;
                return;
            }
            in = in.next;
        }
        if(in.val<=n.val){
            in.next = n;
        }
        return;
    }
}

官方题解:
在这里插入图片描述

class Solution {
    public ListNode insertionSortList(ListNode head) {
        if (head == null) {
            return head;
        }
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode lastSorted = head, curr = head.next;
        while (curr != null) {
            if (lastSorted.val <= curr.val) {
                lastSorted = lastSorted.next;
            } else {
                ListNode prev = dummyHead;
                while (prev.next.val <= curr.val) {
                    prev = prev.next;
                }
                lastSorted.next = curr.next;
                curr.next = prev.next;
                prev.next = curr;
            }
            curr = lastSorted.next;
        }
        return dummyHead.next;
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/insertion-sort-list/solution/dui-lian-biao-jin-xing-cha-ru-pai-xu-by-leetcode-s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值