题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的全部节点组成的。
解题思绪:
创建一个虚拟节点,循环比力l1、l2链表各节点的巨细,将较小的节点追加到虚拟节点后,返回新链表
1、定义链表节点结构,写入测试数据
2、创建一个虚拟节点(哑结点),让当前节点指向虚拟节点
哑结点(dummy node)是一种在链表操纵中常用的本领,它代表一个暂时的、不存储有用数据的节点。哑结点通常用作链表的头部或某个操纵的起始点,从而简化界限条件的处置惩罚。
3、遍历l1、l2链表,比力l1、l2中各个节点的巨细(循环条件是两个链表均不为空),将较小的节点,添加到新链表(虚拟节点之后)
4、遍历完后(即有l1或l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可
5、返回新链表
6、完备代码
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>合并两个有序链表</title>
- </head>
- <body>
- <p>
- <h4>
- 挑战内容
- </h4>
- 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
- </p>
- <p>
- 输入:l1 = 1 -> 2 -> 4 -> null, l2 = 1 -> 3 -> 4 -> null
- 输出:1 -> 1 -> 2 -> 3 -> 4 -> 4 -> null
- </p>
- </body>
- <script>
- // 定义链表节点结构
- function ListNode(val,next=null){
- this.val=val
- this.next=next
- }
- // 测试数据
- let l1=new ListNode(1,new ListNode(2,new ListNode(4)))
- let l2 = new ListNode(1, new ListNode(3, new ListNode(4)))
- mergeTwoLists(l1,l2)
- function mergeTwoLists(l1, l2) {
- // 查看测试数据是否正确
- // console.log(l1,l2);
- // 创建一个虚拟节点
- let node = new ListNode(0)
- // 当前节点
- let cur = node
- // 遍历l1、l2
- while (l1 !== null && l2 !== null) {
- // l1某个节点上的值<=l2某个节点上的值时
- if(l1.val <= l2.val){
- cur.next= l1
- l1 = l1.next
- }else{
- cur.next=l2
- l2=l2.next
- }
- // 当有节点在下一位时(新增了l1/l2节点),当前节点的指针指向下一个节点
- cur=cur.next
- }
- // 遍历完后(即有l1/l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可
- if (l1 !== null) {
- cur.next=l1
- }
- if (l2 !== null) {
- cur.next = l1
- }
- // console.log(node.next);
-
- // 返回新链表
- return node.next
- }
- </script>
- </html>
复制代码
注:在提交时必要将定义的链表结构一同提交,即如下:
- // 定义链表节点结构
- function ListNode(val,next=null){
- this.val=val
- this.next=next
- }
- function mergeTwoLists (l1, l2) {
- // 创建一个虚拟节点
- let node = new ListNode(0)
- // 当前节点
- let cur = node
- // 遍历l1、l2
- while (l1 !== null && l2 !== null) {
- // l1某个节点上的值<=l2某个节点上的值时
- if(l1.val <= l2.val){
- cur.next= l1
- l1 = l1.next
- }else{
- cur.next=l2
- l2=l2.next
- }
- // 当有节点在下一位时(新增了l1/l2节点),当前节点的指针指向下一个节点
- cur=cur.next
- }
- // 遍历完后(即有l1/l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可
- if (l1 !== null) {
- cur.next=l1
- }
- if (l2 !== null) {
- cur.next = l2
- }
- // console.log(node.next);
-
- // 返回新链表
- return node.next
- }
- module.exports = mergeTwoLists
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |