半✅\(^o^)/~
题目描述
对链表进行排序。
思路:
1.借助辅助列表list,将链表中的值压入到list。
2.对list进行排序,将排好序的list中的值返回到链表里。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head==nullptr||head->next==nullptr)
return head;
list<int> v;
for (ListNode* p=head; p!=nullptr; p=p->next)
{
v.push_back(p->val);
}
v.sort();
for(ListNode* p=head; p!=nullptr; p=p->next)
{
p->val = v.front();
v.pop_front();
}
return head;
}
};
快速排序:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if (head==nullptr||head->next==nullptr)
return head;
insertionSortList(head, nullptr);
return head;
}
void insertionSortList(ListNode*head, ListNode*end)
{
if (head!=nullptr||head->next!=nullptr)
{
ListNode* p1=head;
ListNode* p2=head;
while(p2->next!=nullptr)
p2=p2->next;
int pivot= p2->val;
p2=head;
while(p2->next!=nullptr)
{
if (p2->val<pivot)
{
int tmp= p2->val;
p2->val=p1->val;
p1->val=tmp;
p1=p1->next;
}
p2=p2->next;
}
p2->val=p1->val;
p1->val=pivot;
insertionSortList(head,p1);
insertionSortList(p1->next,end);
}
}
};