链表插入排序

Posted vector11248

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表插入排序相关的知识,希望对你有一定的参考价值。

Leetcode 147

思路总结

1.在头部搞一个哨兵dummy,处理头部插入的情况。最后返回哨兵的next即可。

2. 搞一个指针,从前往后走,依次比较该node与node.next的值,只要<=,往后走。一旦node.val>node.next.val,则停止在这个位置。此时需要为node.next找到一个合适的插入位置。

3. 再搞一个指针,从dummy.next.val开始与node.next.val比,只要<=,则往后走。而一旦遇到>,说明找到了插入的位置P。

4.在P位置插入即可。这时候就是一个插入节点的问题,处理好指针的指向关系即可。

package Leet_Code;

/**
 * @program: Leetcode
 * @description:
 * @create: 2018-09-16 11:37
 **/
public class Num147_InsertionSortList {
    public static class ListNode{
        int val;
        ListNode next;
        ListNode(int x){ val = x;}
    }

    public static ListNode insertionSortList(ListNode head) {
        if(head==null || head.next==null)return head;
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        while (head!=null && head.next !=null){
            if(head.val <= head.next.val){
                head = head.next;
            }
            else {
                ListNode cur = dummy;
                while (cur.next.val < head.next.val){
                    cur = cur.next;
                }
                ListNode temp_head_next = head.next;
                ListNode temp_cur_next = cur.next;
                cur.next = head.next;
                head.next = head.next.next;
                temp_head_next.next = temp_cur_next;


            }
        }
        return dummy.next;
    }

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(8);
        head.next.next = new ListNode(2);
        head.next.next.next = new ListNode(7);


        ListNode cur = insertionSortList(head);
        while (cur!=null){
            System.out.print(cur.val+"    ");
            cur = cur.next;
        }
    }


}

 

以上是关于链表插入排序的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第147题—对链表进行插入排序—Python实现

LeetCode第147题—对链表进行插入排序—Python实现

letcode每日一题-对链表进行插入排序

算法题 14 LeetCode 147 链表的插入排序

[一周一算法] 链表与插入排序

Leetcode147-对链表进行插入排序(Python3实现)