标签:01 ListNode val 08 next 链表 l2 l1
题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/
题目说明:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
题目示例:示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
题目思路:
如上,力扣平台已经给出了函数方法,可以使用递归的思想与非递归的思想进行解决
非递归思想:
1、创建虚拟头结点与指向头结点的指针
2、进行判断链表是否为空,l1 为空怎么解决,l2为空怎么解决,l1、l2都不为空怎么解决
3、l1 l2 都不为空时 需要对链表里的变量进行判断,若l1.val < l2.val 需要将p指针指向l1、l1指针指向下一个变量
代码:
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { //非递归做法 ListNode * head = new ListNode(0);//链表都有虚拟的头结点,定义虚拟的头结点 ListNode *p = head;//定义一个listnode类型的指针,并指向头结点 //1、首先判断两个链表是否为空,都不为空时 while(l1 && l2 ){ //2、判断l1 与 l2 的值 l1 l2 为两个指针,从0开始索引 if(l2->val > l1->val) { p->next = l1; l1=l1->next; } else { p->next = l2; l2=l2->next; } //存入数值后,将值往后移动一位 p=p->next; } //当有L1或者L2为空时,直接将另一个链表中剩下的数存入p的尾部 if(l1 !=nullptr) { p->next=l1; } if(l2 !=nullptr){ p->next=l2; } return head->next; } };
递归代码:
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; } } }
标签:01,ListNode,val,08,next,链表,l2,l1 来源: https://www.cnblogs.com/gjianli/p/15086842.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。