链表的堆排序

class Solution {
public:
	ListNode *sortList(ListNode *head) {
		if (!head || !head->next)
		{
			return head;
		}
		ListNode *p = head;
		ListNode *q = head->next;
		while (q && q->next)
		{
			p = p->next;
			q = q->next->next;
		}
		ListNode *left = sortList(p->next);
		p->next = NULL;
		ListNode *right = sortList(head);
		return MergeSort(left, right);
	}
	ListNode *MergeSort(ListNode *left, ListNode *right)
	{
		ListNode node(0);
		ListNode *p = &node;
		while (left && right)
		{
			if (left->val < right->val)
			{
				p->next = left;
				left = left->next;
			}
			else
			{
				p->next = right;
				right = right->next;
			}
			p = p->next;
		}
		if (left) p->next = left;
		if (right) p->next = right;
		return node.next;
	}
};

 

你可能感兴趣的:(数据结构,链表的堆排序)