头指针与头结点以及首元结点的关系:html
问题分析前端
实现要点bash
一、设置指针t1遍历L1,指针t2遍历L2,指针Ptr指向合适的结点(在L1中的结点,或者L2中的结点)来构造新的链表L。数据结构
代码实现方案一:建立一个新的链表用来存储排列数据, 而后用while循环检测l1和l2中的val
值,若是l1.var<=l2.var
,那么就让新链表的next
指针指向l1的val,
,而后改变l1
的指针指向而且将l1
的下一个值指向l1
,依次迭代,反之,若是l1.val>l2.var
那么就让新链表的next
指针指向l2
的val,
,而后改变l2
的指针指向而且将l2
的下一个值指向l2
,依次迭代,直到左右节点迭代完,判断l1
是否为空,返回新链表l3
.函数
<script>
function mergeTwoLists(l1, l2) {
var l3 = new ListNode(-1);
var c3 = l3;
while (l1 !== null && l2 !== null) {
if (l1.val <= l2.val) {
c3.next = l1;
l1 = l1.next;
} else {
c3.next = l2;
l2 = l2.next;
}
c3 = c3.next;
}
c3.next = (l1 === null) ? l2 : l1;
return l3.next;
}
// 自定义一个链表
function ListNode(val) {
this.val = val;
this.next = null;
}
</script>
复制代码
实现方法二:递归学习
function mergeTwoLists(l1, l2) {
if (l1 = null && l2 == null) {
return null;
}
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;
}
}
复制代码
能够复制以上代码到leetcode-合并连个有序链表进行验证。ui
欢迎小伙伴评论区提出更好的解决方案,记得点赞👍鼓励下哦!this
参考连接:spa
链表基础知识总结.net
扫一扫下面的二维码,回复学习便可免费领取最新前端学习资料,也但愿在前端进阶的路上,咱们一块儿成长,一块儿进步!