您的位置:首页 > 其它

LeetCode 5 Insertion Sort List

2014-08-17 14:28 323 查看
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;
* }
* }
*/
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 tail = newHead;
//tail.next == null说明全部排好序
while(tail.next != null){
//选取当前未排序的带个节点,并从原有链表删除
ListNode cur = tail.next;
tail.next = tail.next.next;
ListNode p = newHead;
//遍历已排序链表,试图找到合适位置
while(p != tail && p.next.val < cur.val){
p = p.next;
}
cur.next = p.next;
p.next = cur;
//p==tail说明已排序节点的值都比当前节点小,应该加在末尾
//而如果加在末尾,则tail要后移,其他情况tail不用后移
if(p == tail){
tail = tail.next;
}
}
return newHead.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息