题目
给你链表的头结点 head
,请将其按 升序 排列并返回 排序后的链表 。
进阶:
- 你可以在
O(nlogn)
时间复杂度和常数级空间复杂度下,对链表进行排序吗?
示例 1:
输入:head = [4,2,1,3]
输出:[1,2,3,4]
示例 2:
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:
输入:head = []
输出:[]
提示:
- 链表中节点的数目在范围
[0, 5 * 104]
内 -105 <= Node.val <= 105
代码
法一(基本)
class Solution
{
public:
ListNode *sortList(ListNode *head)
{
vector<int> temp;
ListNode *p = head;
while (p != nullptr)
{
temp.push_back(p->val);
p = p->next;
}
if (temp.empty())
{
return nullptr;
}
sort(temp.begin(), temp.end());
int cnt = 0;
ListNode *newHead = new ListNode(temp[cnt]);
ListNode *pp = newHead;
cnt++;
while (cnt < temp.size())
{
newHead->next = new ListNode(temp[cnt]);
newHead = newHead->next;
cnt++;
}
return pp;
}
};
法二:(进阶)
待补充