题意:
给定一个节点数为n的无序单链表,对其按升序排序。
方法一:
直接暴力
思路:二重循环,直接冒泡排序。交换链表节点中的值。
class Solution { public: ListNode* sortInList(ListNode* head) { ListNode *p,*q; for(p=head;p!=nullptr;p=p->next){//二重循环 for(q=p->next;q!=nullptr;q=q->next){ if(p->val>q->val){//交换值 int t=p->val; p->val=q->val; q->val=t; } } } return head; } };
时间复杂度:空间复杂度:
方法二:
数组+快排
思路:用一个临时数组存储链表的值,再对数组进行快速排序,最后将临时数组的值赋给链表。
class Solution { public: ListNode* sortInList(ListNode* head) { vector<int> v; ListNode *p=head; while(p!=nullptr){//将链表的值存储到临时数组 v.push_back(p->val); p=p->next; } sort(v.begin(),v.end());//临时数组快排 p=head; int i=0; while(p!=nullptr){//将临时数组的值赋给链表的节点 p->val=v[i++]; p=p->next; } return head; } };
时间复杂度:
空间复杂度: