合并两个有序链表(侧重递归实现)

在这里插入图片描述
法1:常规

class Solution {
public:
	ListNode* mergeTwoLists(ListNode*p1, ListNode*p2)
	{
		ListNode*t1, *t2;//双指针
		t1 = p1, t2 = p2;
		ListNode*newHead = new ListNode(-1);
		ListNode*t = newHead;
		while (t1 != NULL && t2 != NULL)
		{
			if (t1 != NULL&&t2 != NULL)
			{
				if (t1->val <= t2->val)
				{
					t->next = t1;
					t1 = t1->next;
					t = t->next;

				}
				else
				{
					t->next = t2;
					t2 = t2->next;
					t = t->next;

				}
			}
		}
		if (t1 == NULL)
		{
			t->next = t2;

		}
		else
			t->next = t1;
		return newHead->next;
	}

};

法2:递归三部曲,很简单,不解释

class Solution {
public:
	ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
		if (l1 == NULL)return l2;
		if (l2 == NULL)return l1;
		if (l1->val <= l2->val)
		{
			l1->next = mergeTwoLists(l1->next, l2);//已经完成了后面结点的合并
			return l1;
		}
		else
		{
			l2->next = mergeTwoLists(l1, l2->next);//已经完成了后面结点的合并
			return l2;
		}
	}
};
发布了212 篇原创文章 · 获赞 4 · 访问量 8792

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/104683355