给你链表的头结点 head
,请将其按升序排列并返回排序后的链表
示例 1:
输入:head = [4,2,1,3]
输出:[1,2,3,4]
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:
输入:head = []
输出:[]
三个步骤
1)取出链表里面的元素放到数组里面
这里面通过遍历链表,将所有值放到这个数组里面。
ListNode *p = head; while(p) { num.push_back(p->val); p = p ->next; }
2)利用sort函数讲其排序
sort(num.begin(),num.end());
3)在通过遍历将数组里面的值依次放到链表中
ListNode *q = head; for(auto it =num.begin();it!=num.end();it++) { q->val = *it; q = q->next; }
class Solution { public: ListNode* sortList(ListNode* head) { vector<int> num; ListNode *p = head; ListNode *q = head; while(p) { num.push_back(p->val); p = p ->next; } sort(num.begin(),num.end()); for(auto it =num.begin();it!=num.end();it++) { q->val = *it; q = q->next; } return head; } }
注:
这里面自己写的时候有个bug,就是 q->val =*it 和 q = q->next 的位置调换,导致会出现q在最后指向的时候出现指向为空的情况 。我以为链表的头结点不存值,所以没有先让头结点next了一下