BM4-合并两个有序链表
题目要求
思路分析
对于链表类的题,其实大部分有一个万能的方法,就是遍历一次链表,将他们的节点放到数组中,将节点的next置空,使用数组的各种方法去操作链表,之后再拼接链表。不过这种方法仅局限于刷题,只能做到把题过了,可以理解为一种“逃课”,我个人还是不建议的,不过能用这种方法解出来题也是一种进步
回到正题,新建一个头节点,之后使用一次遍历,将其中一个链表遍历为空即可。
对每次的节点数据进行两两比对,小的就添加,并且指针前进。
代码参考
var mergeTwoLists = function (list1, list2) {
// 创建的新链表的守卫节点
const prehead = new ListNode(-1)
// 让prev指针指向当前的节点,它的next即为返回链表的head
let prev = prehead
// 当list1和list2其中有一条为空时,就退出,将非空的那条添加在新链表之后
while (list1 != null && list2 != null) {
// 如果list1的值小于list2的值,那么则将list1节点添加,并将指针前进
if (list1.val <= list2.val) {
prev.next = list1
list1 = list1.next
} else {
prev.next = list2
list2 = list2.next
}
prev = prev.next
}
// 合并后 list1 和 list2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
prev.next = list1 === null ? list2 : list1
return prehead.next
}
return prehead.next
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理