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

来源:互联网 发布:js获取radio选中状态 编辑:程序博客网 时间:2024/05/17 02:44

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;    }
原创粉丝点击