leetCode 21 合并两个有序链表(链表,递归)

题目链接:点击查看

题目描述:

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

输入输出:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

题目分析:详见如下代码


1.非递归法:

ListNode *mergeTwoLists(ListNode *l1,ListNode *l2)
{
	ListNode *dummy=new ListNode(0),*node=dummy;
	while(l1&&l2)//当while循环终止时 剩下的节点的value值均大于 之前的任一节点的value值 且递增 故直接接在node后即可	 
	{
		if(l1->val<=l2->val)
		{
			node->next=l1;
			l1=l1->next;
		}
		else
	    {
	    	node->next=l2;
	    	l2=l2->next;
		
		}
		node=node->next;
	}
	node->next=l1?l1:l2;//node节点的next域指向未遍历完成的某个链表 
	return dummy->next;
}

2.递归法:

ListNode *mergeTwoLists(ListNode *l1,ListNode *l2)
{
	if(!l2)
	return l1; 
	if(!l1)
	return l2;
	if(l1->val>l2->val)
	{
		l2->next=mergeTwoLists(l1,l2->next);//如果l1的val值大于l2的val值 则l2的next域指向两个链表的归并结果 
		return l2;
	}
	l1->next=mergeTwoLists(l1->next,l2);//把l1作为归并后的链表 
	return l1;
}

 

你可能感兴趣的:(C++,STL与基础数据结构,链表,算法,数据结构,leetcode)