题目
给定一个节点数为n的无序单链表,对其按升序排序。
数据范围:0<n≤100000
要求:空间复杂度 O(n),时间复杂度 O(nlogn)
思路
先将所有节点的值存储到一个list里面,然后对list进行排序,根据排序后的list创建新的排序链表。
代码
python版本:
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类 the head node
# @return ListNode类
#
class Solution:
def sortInList(self , head: ListNode) -> ListNode:
# write code here
storage = []
while(head):
storage.append(head.val)
head = head.next
storage.sort()
new_head = ListNode(-1)
sg = new_head
for val in storage:
new_head.next = ListNode(val)
new_head = new_head.next
return sg.next
c++版本:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
ListNode* sortInList(ListNode* head) {
// write code here
vector<int> storage;
while(head){
storage.push_back(head->val);
head = head->next;
}
sort(storage.begin(), storage.end());
ListNode *new_head = new ListNode(-1);
ListNode * sg = new_head;
int len = storage.size();
for(int i=0; i<len; i++){
new_head->next = new ListNode(storage[i]);
new_head = new_head->next;
}
return sg->next;
}
};