http://oj.leetcode.com/problems/insertion-sort-list/
Sort a linked list using insertion sort.
基本分析:用插入排序对一个链表进行排序。
一开始写的时候想套用数组的插入排序,结果发现无法对末节点加上NULL。
对链表进行插入排序的正确方法是:新建一个头节点,遍历原来的链表,对原链表的每个节点找到新链表中适合插入位置的前指针,然后执行插入操作。
这种操作链表的题有一个技巧就是新建一个dummy作为head,然后把数据插入到dummy的链表中,最后返回dummy.next。
重写了一遍,bug free,一次AC了:)
Sort a linked list using insertion sort.
基本分析:用插入排序对一个链表进行排序。
一开始写的时候想套用数组的插入排序,结果发现无法对末节点加上NULL。
对链表进行插入排序的正确方法是:新建一个头节点,遍历原来的链表,对原链表的每个节点找到新链表中适合插入位置的前指针,然后执行插入操作。
这种操作链表的题有一个技巧就是新建一个dummy作为head,然后把数据插入到dummy的链表中,最后返回dummy.next。
重写了一遍,bug free,一次AC了:)
public class Solution {
ListNode searchForInsertPos(ListNode head, int val) {
ListNode pre = head;
ListNode next = head.next;
while(next!=null&&next.val<=val) {
pre = next;
next = next.next;
}
return pre;
}
public ListNode insertionSortList(ListNode head) {
if(head==null||head.next==null) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = null;
ListNode new_next;
ListNode pre,next;
//ListNode iter = head;
while(head!=null) {
next = head.next;
pre = searchForInsertPos(dummy,head.val);
new_next = pre.next;
head.next = new_next;
pre.next = head;
head = next;
}
return dummy.next;
}
}