您的位置:首页 > 其它

LeetCode解题报告:Insertion Sort List

2014-06-12 16:38 176 查看

Insertion Sort List

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 )。



题解:

/**
* 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) {
// dummy is dummy head node,not head pointer.
ListNode dummy = new ListNode(-1);
ListNode pre, newNext;
ListNode oldNext;
while (head != null) {
oldNext = head.next;
pre = searchInsertPosition(dummy, head.val);
newNext = pre.next;
pre.next = head;
head.next = newNext;
head = oldNext;
}
return dummy.next;
}

private ListNode searchInsertPosition(ListNode headNode, int val) {
ListNode pre = headNode;
ListNode nex = pre.next;
while ((nex != null) && (nex.val <= val)) {
pre = nex;
nex = nex.next;
}
return pre;// inserted position is after pre node.
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: