题目:
https://leetcode-cn.com/problems/sort-list/submissions/
代码:
/**
-
Definition for singly-linked list.
-
struct ListNode {
-
int val;
-
ListNode *next;
-
ListNode(int x) : val(x), next(NULL) {}
-
};
/
class Solution {
public:
ListNode sortList(ListNode* head) {
ListNode *p1 = head;
ListNode *p2 = head;if(p1 == NULL) return NULL; if(p1->next == NULL) { return p1; } ListNode *last ; while(p1!=NULL&&p2!=NULL&&p2->next!=NULL) { last = p1; p1 = p1->next; p2 = p2->next->next; } last->next = NULL; ListNode *head3 = sortList(p1); ListNode *head2 = sortList(head); ListNode *head4 = mergeList(head2,head3); return head4;
}
ListNode *mergeList(ListNode *head1,ListNode *head2)
{
ListNode *p1 = head1;
ListNode *p2 = head2;
if(p1 == NULL)
{
return p2;
}
if(p2 == NULL)
{
return p1;
}
ListNode head(0);
ListNode *phead = &head;
while(p1!=NULL&&p2!=NULL)
{
if(p1->val < p2->val)
{
phead->next = p1;
phead = phead->next;
p1 = p1->next;
}
else
{
phead->next = p2;
phead = phead->next;
p2 = p2->next;
}
}
if(p1 == NULL)
{
phead->next = p2;
}
if(p2 == NULL)
{
phead->next = p1;
}
return head.next;
}
};
结果: