码迷,mamicode.com
首页 > 编程语言 > 详细

对链表进行插入排序

时间:2018-07-21 21:30:09      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:lis   insert   位置   技术分享   图片   bubuko   nbsp   rtl   有序   

对链表元素插入排序

示例 1:

输入: 4->2->1->3
输出: 1->2->3->4

示例 2:

输入: -1->5->3->4->0
输出: -1->0->3->4->5

 

 

 

解题思路:

对于待排序的元素,在前部分有序链表中找到合适的位置插入即可。

技术分享图片

对结点2插入排序,只需将其插入到节点1与节点3之间即可。

从起点开始遍历查找第一个大于节点2的节点,将节点2插入该节点的前面。

 

定义两个指针p,q, q指向待排序节点的前一个节点,p用于查找第一个大于待排序节点的节点

 

技术分享图片

借用p,q指针可以将节点2插入节点3之前。

 

 

 

实现代码:

    public static ListNode insertionSortList(ListNode head) {

        ListNode first = new ListNode(0);
        first.next = head;

        ListNode p = first;
        ListNode q = head;
        ListNode temp;

        while (q.next != null) {

            p = first;
            while (p!=q && p.next.val<q.next.val) p = p.next;
            if (p != q) {
                temp = q.next;
                q.next = temp.next;
                temp.next = p.next;
                p.next = temp;
            }
            else q = q.next;
        }
        return first.next;
    }

 

对链表进行插入排序

标签:lis   insert   位置   技术分享   图片   bubuko   nbsp   rtl   有序   

原文地址:https://www.cnblogs.com/deltadeblog/p/9347939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!