在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。
示例 1:
輸入:4->2->1->3輸出:1->2->3->4示例 2:
輸入:-1->5->3->4->0輸出:-1->0->3->4->5
/*
思路:看到o(n log n) 首先想到的是遞迴,排序中的歸併遞迴排序滿足這個時間複雜度
難點一:找到乙個連表的中間節點
難點二: 兩個連表進行合併
*/public listnode sortlist(listnode head)
/*此方法是把乙個連表分成兩個後最後呼叫合併方法進行合併返回乙個連表
*/public listnode mergesort(listnode head)
//找到中間節點的方法可以是兩個指標乙個速度是1乙個速度是2當快指標走到末尾是慢指標則為中間節點
//快listnode f = head;
//慢listnode l = head;
//中間節點
listnode mid = null;
while (f != null && f.next != null)
mid.next = null;
listnode left = mergesort(head);
//因為最後一次會繼續向後在走一次到達中間節點的下乙個
listnode right = mergesort(l);
//此函是為合併連表
return merge(left, right);
}public listnode merge(listnode left, listnode right) else
}if (left != null)
if (right != null)
return heard.next;
}
Leetcode 148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5在陣列儲存下的歸併排序,需要借出輔助空間完成,而鍊錶儲存的歸併排序,不需要借助輔助空間,直接在原來的鍊錶上進行操作,...
LeetCode 148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3輸出 1 2 3 4示例 2 輸入 1 5 3 4 0輸出 1 0 3 4 5歸併這裡我感覺有點不符合題意 不符合常數空間 如果是快排的話呢,交換節點還是很麻煩的,所以快排交換值了 癱.jpg cl...
leetcode148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 看到題目就知道要二分,這裡用的是遞迴版歸併 definition for singly linked list....