147. Insertion Sort List--单向链表移动

Sort a linked list using insertion sort.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode insertionSortList(ListNode head) {

    }
}

大神们的解决思路如下:
建立一个node:helper作为已排序链表的头,建立三个辅助指针pre,cur,next。pre用于指定已排序链表的前一帧,cur和next用于原始链表的当前帧和下一帧。即:
helper(pre)->null
head(cur)->first(next)->…->null

利用代码段

cur.next = pre.next;
pre.next = cur;
pre = helper;
cur = next;

来使得cur指的帧插入pre和pre.next之中。得到:
helper(pre)->head->null
head->first(cur)->second(next)->…->null
再通过代码段

while( pre.next != null && pre.next.val < cur.val ){
    pre = pre.next;
}

来是的pre.next和cur进行毕竟,对如下情况:
helper(pre)->head->first->null
head->first->second(cur)->third(next)…->null
若pre.next(head)

public ListNode insertionSortList(ListNode head) {
        if( head == null ){
            return head;
        }

        ListNode helper = new ListNode(0); //new starter of the sorted list
        ListNode cur = head; //the node will be inserted
        ListNode pre = helper; //insert node between pre and pre.next
        ListNode next = null; //the next node will be inserted
        //not the end of input list
        while( cur != null ){
            next = cur.next;
            //find the right place to insert
            while( pre.next != null && pre.next.val < cur.val ){
                pre = pre.next;
            }
            //insert between pre and pre.next
            cur.next = pre.next;
            pre.next = cur;
            pre = helper;
            cur = next;
        }

        return helper.next;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值