您的位置:首页 > 编程语言 > Java开发

Insertion Sort List (Java)

2015-01-02 20:11 435 查看
Sort a linked list using insertion sort.

写的有点乱,有时间再写一遍

Source

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

ListNode st = new ListNode(0);
st.next = head;
ListNode q = head.next;

head.next = null;

while(q != null){
ListNode ppre = head, ppost = head.next;
ListNode l = q.next;
if(q.val < head.val){
q.next = head;
st.next = q;
head = q;

}else{ //插排是稳定排序 相等的情况往后走

if(ppost != null){
while(ppre != null && ppost != null && q.val >= ppost.val){ //指针后移要判断边界!!
ppost = ppost.next;
ppre = ppre.next;
}
if(ppost != null && q.val < ppost.val) { //注意ppost有可能为null
q.next = ppost;
ppre.next = q;
}
}
if(ppost == null){
q.next = null;
ppre.next = q;
}
}
q = l;

}
return st.next;

}
}

Test

public static void main(String[] args){
ListNode a = new ListNode(3);
a.next = new ListNode(2);
a.next.next = new ListNode(4);
// a.next.next.next = new ListNode(2);

ListNode b = new Solution().insertionSortList(a);
while(b != null){

System.out.println(b.val);
b = b.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode