oral_quiz->#Merge排序列表#

#include <stdio.h>
#include "Utilities/List.h"

ListNode* MergeSortedLists(ListNode* pHead1, ListNode* pHead2) {
	if(pHead1 == NULL) return pHead2;
	if(pHead2 == NULL) return pHead1;

	ListNode* pNewHead = NULL;

	if(pHead1->m_nValue <= pHead2->m_nValue) {
		pNewHead = pHead1;
		pNewHead->m_pNext = MergeSortedLists(pHead2, pHead1->m_pNext);
	}
	else {
		pNewHead = pHead2;
		pNewHead->m_pNext = MergeSortedLists(pHead1, pHead2->m_pNext);
	}

	return pNewHead;
}


//normal
void Test1() {
	printf("Test1 starts:\n");
	ListNode* pNode1_1 = CreateListNode(1);
	ListNode* pNode1_2 = CreateListNode(5);
	ListNode* pNode1_3 = CreateListNode(8);
	ListNode* pNode1_4 = CreateListNode(9);

	ConnectListNodes(pNode1_1, pNode1_2);
	ConnectListNodes(pNode1_2, pNode1_3);
	ConnectListNodes(pNode1_3, pNode1_4);

	ListNode* pNode2_1 = CreateListNode(2);
	ListNode* pNode2_2 = CreateListNode(4);
	ListNode* pNode2_3 = CreateListNode(8);
	ListNode* pNode2_4 = CreateListNode(11);

	ConnectListNodes(pNode2_1, pNode2_2);
	ConnectListNodes(pNode2_2, pNode2_3);
	ConnectListNodes(pNode2_3, pNode2_4);

	PrintList(pNode1_1);
	PrintList(pNode2_1);
	PrintList(MergeSortedLists(pNode1_1, pNode2_1));
}

//NULL, NULL
void Test2() {
	printf("Test2 starts:\n");
	PrintList(MergeSortedLists(NULL, NULL));
}

//list1 == NULL
void Test3() {
	printf("Test3 starts:\n");
	ListNode* pNode1_1 = CreateListNode(1);
	ListNode* pNode1_2 = CreateListNode(5);
	ListNode* pNode1_3 = CreateListNode(8);
	ListNode* pNode1_4 = CreateListNode(9);

	ConnectListNodes(pNode1_1, pNode1_2);
	ConnectListNodes(pNode1_2, pNode1_3);
	ConnectListNodes(pNode1_3, pNode1_4);

	PrintList(MergeSortedLists(NULL, pNode1_1));
}

//only one node
void Test4() {
	printf("Test4 starts:\n");
	ListNode* pNode1_1 = CreateListNode(10);
	ListNode* pNode2_1 = CreateListNode(100);
	PrintList(MergeSortedLists(pNode1_1, pNode2_1));
}

int main(int argc, char* argv[]) {
	Test1();
	Test2();
	Test3();
	Test4();
	return 0;
}



你可能感兴趣的:(list,merge,sorted)