标签:结点 return offer 16 链表 pHead1 pHead2 null
题目地址:合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目示例
输入:
{1,3,5},{2,4,6}
返回值:
{1,2,3,4,5,6}
解法分析
因为给出的两个链表都是单调递增的,合并后的链表也是单调不递减,所以我们只需要对比两个链表的头结点即可,若哪个链表的头结点更小,就记录在新链表中,然后该链表头结点指向后一个结点,直到两个链表都指向null。返回做记录的新链表即可。见算法1。
因为需要不断比较两个链表的头结点,所以我们也可以考虑使用递归方法,见算法2。
代码
算法1
1 /*function ListNode(x){ 2 this.val = x; 3 this.next = null; 4 }*/ 5 function Merge(pHead1, pHead2) 6 { 7 // write code here 8 if(pHead1 === null) return pHead2; 9 if(pHead2 === null) return pHead1; 10 var pHead = new ListNode(0); 11 var cur = pHead; 12 while(pHead1 && pHead2){ 13 if(pHead1.val <= pHead2.val){ 14 cur.next = pHead1; 15 pHead1 = pHead1.next; 16 }else{ 17 cur.next = pHead2; 18 pHead2 = pHead2.next; 19 } 20 cur = cur.next; 21 } 22 cur.next = pHead1 ? pHead1 : pHead2; 23 return pHead.next; 24 }
算法2
1 function Merge(pHead1, pHead2) 2 { 3 // write code here 4 if(pHead1 === null) return pHead2; 5 if(pHead2 === null) return pHead1; 6 var pHead = null; 7 if(pHead1.val <= pHead2.val){ 8 pHead = pHead1; 9 pHead.next = Merge(pHead1.next, pHead2); 10 }else{ 11 pHead = pHead2; 12 pHead.next = Merge(pHead1, pHead2.next); 13 } 14 return pHead; 15 }
执行结果
标签:结点,return,offer,16,链表,pHead1,pHead2,null 来源: https://www.cnblogs.com/sunlinan/p/14292031.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。