首页 > 编程语言 > 详细

对链表进行插入排序

时间:2020-11-20 21:43:38      阅读:36      评论:0      收藏:0      [点我收藏+]

插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中


技术分享图片


解题思路

插入排序算法想必大家都不陌生了,如果不了解的话来看看下面这篇博客吧

用 Java 实现的八种常用排序算法

难点在于这是个单向链表,不能向数组一样直接从后往前遍历,因此我们每找到一个不符合排序规则的元素,都必须从头再遍历,找到合适的插入点,而这又考察到有关链表的操作

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode insertionSortList(ListNode head) {
        if(head == null) {
            return head;
        }
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode lastNode = head, curNode = head.next;
        while(curNode != null) {
            if(lastNode.val <= curNode.val) {
                lastNode = lastNode.next;
            } else {
                ListNode preNode = dummyHead;
                while(preNode.next.val <= curNode.val) {
                    preNode = preNode.next;
                }
                lastNode.next = curNode.next;
                curNode.next = preNode.next;
                preNode.next = curNode;
            }
            curNode = lastNode.next;
        }
        return dummyHead.next;
    }
}

对链表进行插入排序

原文:https://www.cnblogs.com/Yee-Q/p/14012924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!