LeetCode每日一练【21】
作者:互联网
Merge Two Sorted Lists
我的解法
我的第一次提交
介绍
.....
思路
-
构建链表:
listNode
(存放返回结果),listnode1
(链表1),listnode2
(链表2) -
创建三个指针分别指向三个链表:
let [pointer, pointer1, pointer2] = [listnode, listnode1.next, listnode2.next];
-
依次比较
listnode1
和listnode2
的val
值- 如果
pointer1.val < pointer2.val
, 移动pointer1
指针,pointer1.val
值入pointer
指向的链表, 移动pointer
指针 - 如果
pointer1.val > pointer2.val
, 移动pointer2
指针,pointer2.val
值入pointer
指向的链表, 移动pointer
指针
- 如果
-
如果
pointer1
和pointer2
在经过循环比较后, 可能存在一个非空, 需要将pointer.next = poninter1
或者pointer.next = pointer2
-
返回
listnode.next
代码
/*
* @Author: fox
* @Date: 2022-05-03 10:48:54
* @LastEditors: fox
* @LastEditTime: 2022-05-03 13:50:45
* @Description: https://leetcode.com/problems/merge-two-sorted-lists/
*/
class ListNode {
constructor (val, next) {
this.val = (val === undefined ? 0 : val);
this.next = (next === undefined ? null : next)
}
}
/**
* @description: Runtime: 40.85% Memory Usage: 83.57%
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
const mergeTwoLists = (list1, list2) => {
const listnode = new ListNode(0);
const listnode1 = new ListNode(0, list1);
const listnode2 = new ListNode(0, list2);
let [pointer, pointer1, pointer2] = [listnode, listnode1.next, listnode2.next];
while (pointer1 && pointer2) {
if (pointer1.val < pointer2.val) {
pointer.next = new ListNode(pointer1.val)
pointer1 = pointer1.next
pointer = pointer.next
} else {
pointer.next = new ListNode(pointer2.val)
pointer2 = pointer2.next
pointer = pointer.next
}
}
if (pointer1) {
pointer.next = pointer1
}
if (pointer2) {
pointer.next = pointer2
}
return listnode.next
};
const list1 = [1, 2, 4]
const list2 = [1, 3, 4]
console.log(mergeTwoLists(list1, list2))
标签:ListNode,21,val,pointer1,每日,pointer2,next,pointer,LeetCode 来源: https://www.cnblogs.com/mapodoufu/p/16218278.html