题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

C++代码:

struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};

class Solution {
public:
    //递归实现
	ListNode* Merge(ListNode* list1, ListNode* list2)
	{
		if (list1 == NULL)return list2;

		if (list2 == NULL)return list1;

		if (list1->val <= list2->val) {
			list1->next = Merge(list1->next, list2);
			return list1;
		}
		else {
			list2->next = Merge(list1, list2->next);
			return list2;
		}
	}
    //非递归实现
	ListNode* Merge2(ListNode* list1, ListNode* list2)
	{
		if (list1 == NULL)
			return list2;
		if (list2 == NULL)
			return list1;

		ListNode *mergeHead = NULL;
		ListNode *current = NULL;

		while (list1 != NULL && list2 != NULL)
		{
			if (list1->val <= list2->val)
			{
				if (mergeHead == NULL)
				{
					mergeHead = current = list1;
				}
				else
				{
					current->next = list1;
					current = current->next;
				}
				list1 = list1->next;
			}
			else 
			{
				if (mergeHead == NULL)
				{
					mergeHead = current = list2;
				}
				else 
				{
					current->next = list2;
					current = current->next;
				}
				list2 = list2->next;
			}
		}
		if (list1 == NULL)
		{
			current->next = list2;
		}
		else 
		{
			current->next = list1;
		}
		return mergeHead;
	}
};