LeetCode | Insertion Sort List
2014-10-26 09:50
363 查看
题目:Sort a linked list using insertion sort.
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ //插入排序,每次把A[p]插入到正确的位置 public class Solution { public ListNode insertionSortList(ListNode head) { if ( head==null || head.next==null ) return head; ListNode newHead = new ListNode(0); newHead.next = head; ListNode pre = head; //取例: 4 8 3 1 5 ListNode post = head.next; //pre和post用来向后遍历list,查找是否有逆序的存在 while( post != null){ if( post.val >= pre.val ) //正常情况(4<8),继续向后前进查找逆序 { pre = pre.next; post = post.next; } else{ //说明查找到了逆序的存在(8>3),要利用插入排序,把post<插入>到正确的位置 ListNode insertPre = newHead; ListNode insertPost = newHead.next; //这两个变量用来查找插入的位置,插入到insertPre与insertPost之间 while( insertPost.val < post.val ){ //查找插入位置,插入位置应该在List中第一个大于A[p]之前,例如3要插入到4之前 //第一个大于A[p]的位置即insertPost //注:插入A[p]时,其左边已处于排序好的状态 insertPre = insertPost; insertPost = insertPost.next; } pre.next = post.next; //在把post插入到正确位置之前,要记得把pre和后边的list接上,把8和1连上 insertPre.next = post; post.next = insertPost; //此两行即把post插入到正确的位置 post = pre.next; //在进行下一次循环前,重新把post置为pre的下一个 } } return newHead.next; } }
相关文章推荐
- leetcode上的Sort a linked list using insertion sort
- LeetCode--insertion-sort-list
- [LeetCode] Insertion Sort List
- 【leetcode】147 Insertion Sort List
- leetcode-Insertion Sort List
- LeetCode Insertion Sort List
- leetcode_num179_Insertion Sort list
- Insertion Sort List -- LeetCode
- leetcode Insertion Sort List
- LeetCode:Insertion Sort List
- Leetcode-insertion-sort-list ***
- [LeetCode]Insertion Sort List
- leetcode-Insertion Sort List-147
- LeetCode ||Insertion Sort List
- leetcode 147 Insertion Sort List java 算法
- LeetCode--Insertion Sort List
- Insertion Sort List[LeetCode]
- LeetCode(147) Insertion Sort List
- leetcode-147 Insertion Sort List
- leetcode---Insertion Sort List