标签:style class blog code java http
Sort a linked list using insertion sort.
leetcode
subject
思路:
标准的插入排序。考察一下链表的操作。
对链表进行插入排序的正确方法是:新建一个头节点,遍历原来的链表,对原链表的每个节点找到新链表中适合插入位置的前指针,然后执行插入操作。
这种操作链表的题的技巧是:新建一个dummy作为head
node,然后把数据插入到dummy的链表中,最后返回dummy.next。
链表的插入排序图示:
注意头结点和头指针的不同,注意用了多少个指针。
1.需要插入排序的链表和带有head node的排好序的链表:寻找到节点插入的位置pre。
2.在pre后面插入节点node(val =4 )
3.开始遍历下一个node(val =2 )。
题解:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public ListNode insertionSortList(ListNode head) { 14 // dummy is dummy head node,not head pointer. 15 ListNode dummy = new ListNode(-1); 16 ListNode pre, newNext; 17 ListNode oldNext; 18 while (head != null) { 19 oldNext = head.next; 20 pre = searchInsertPosition(dummy, head.val); 21 newNext = pre.next; 22 pre.next = head; 23 head.next = newNext; 24 head = oldNext; 25 } 26 return dummy.next; 27 } 28 29 private ListNode searchInsertPosition(ListNode headNode, int val) { 30 ListNode pre = headNode; 31 ListNode nex = pre.next; 32 while ((nex != null) && (nex.val <= val)) { 33 pre = nex; 34 nex = nex.next; 35 } 36 return pre;// inserted position is after pre node. 37 } 38 }
LeetCode解题报告:Insertion Sort List,布布扣,bubuko.com
LeetCode解题报告:Insertion Sort List
标签:style class blog code java http
原文地址:http://www.cnblogs.com/byrhuangqiang/p/3784209.html