LC21.MergeTwoLinkedList


题目

给定两个升序数组,合并两个数组为一个升序数组

题解

struct LinkedNode
{
	int val;
	LinkedNode* next;
	LinkedNode() : val(0), next(nullptr) {}
	LinkedNode(int x) : val(x), next(nullptr) {}
	LinkedNode(int x, LinkedNode* ptr) : val(x), next(ptr) {}
};

class Solution_Recursion
{
public:
	LinkedNode* mergeTwo(LinkedNode* list1, LinkedNode* list2)
	{
		if (list1 == nullptr) return list2;
		else if (list2 == nullptr) return list1;
		else if (list1->val < list2->val)
		{
			list1->next = mergeTwo(list1->next, list2);
			return list1;
		}
		else
		{
			list2->next = mergeTwo(list1, list2->next);
			return list2;
		}
	}
};

class Solution_Iteration
{
public:
	LinkedNode* mergeTwo(LinkedNode* list1, LinkedNode* list2)
	{
		LinkedNode* templist = new LinkedNode();
		LinkedNode* head = templist;
		while (list1 && list2)
		{
			if (list1->val < list2->val)
			{
				templist->next = list1;
				list1 = list1->next;
			}
			else
			{
				templist->next = list2;
				list2 = list2->next;
			}
			templist = templist->next;
		}
		templist->next = list1 == nullptr ? list2 : list1;
		delete templist;
		return head->next;
	}
};