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;
}
}
写的有点乱,有时间再写一遍
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:Insertion Sort List (Java)
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- Insertion Sort List Java
- Java for LeetCode 147 Insertion Sort List
- insertion-sort-list java code
- LeetCode 147 — Insertion Sort List(C++ Java Python)
- LeetCode147_Insertion Sort List(用插入排序算法对链表进行排序) Java题解
- Insertion Sort List Leetcode java
- [Leetcode][JAVA] Insertion Sort List
- Insertion Sort List Leetcode java
- leetcode 147 Insertion Sort List java 算法
- [Leetcode] Insertion Sort List (Java)
- java List 排序 Collections.sort() 对 List 排序
- [转]java List 排序 Collections.sort() 对 List 排序
- android Collections.sort(List<T> list) 与JAVA Collections.sort(List<T> list)
- java List 排序 Collections.sort() 对 List 排序
- 用Java集合中的Collections.sort方法对list排序的两种方法
- java List 排序 Collections.sort()
- 【Java核心技术】Collections.sort对list进行排序
- java List 排序 Collections.sort() 对 List 排序