IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法-生成链表本地环境及合并两个有序链表 -> 正文阅读

[数据结构与算法]数据结构与算法-生成链表本地环境及合并两个有序链表

数据结构与算法-链表

1.建立链表

在做链表相关的leetcode算法题中,会发现没有本地环境,如何搭建链表的本地环境(JavaScript)。

有两种方式:1.对象;2.构造函数加原型来创建对象

首先建立链表,其包括每个节点及每个节点的val和next。

//创建两个链表:1->2->4, 1->3->4
//方法1:对象
var l1 = {
    val: 1,
    next: {
        val: 2,
        next: { val: 4, next: null },
    },
};

var l2 = {
    val: 1,
    next: {
        val: 3,
        next: { val: 4, next: null },
    },
};

//方法2:构造函数加原型来创建对象(更为自由,每个链表有一个头指针head)
function LinkedList() {
    //属性
    this.head = null
    //记录链表长度
    this.length = 0
    //内部类:节点类
    function ListNode(val) {
        this.val = val
        this.next = null
    }
    //1.追加方法
    LinkedList.prototype.append = function (val) {
        var newNode = new ListNode(val)
        if (this.length == 0) {
            this.head = newNode
        }
        else {
            var current = this.head
            while (current.next) {
                current = current.next
            }
            current.next = newNode
        }
        //3.length+1
        this.length += 1
    }
}
var l1 = new LinkedList()
l1.append(1)
l1.append(2)
l1.append(4)

var l2 = new LinkedList()
l2.append(1)
l2.append(3)
l2.append(4)

2.算法题-合并上述两个有序链表

对于链表这种有连接关系的数据结构,我们可以采用递归和迭代的方式来解答。

2.1方法1:递归

//方法1:对象
var l1 = {
    val: 1,
    next: {
        val: 2,
        next: { val: 4, next: null },
    },
};

var l2 = {
    val: 1,
    next: {
        val: 3,
        next: { val: 4, next: null },
    },
};
//递归(采用第一种方式建立两个链表)
ar mergeTwoLists = (l1, l2) => {
    if (!l1) {
        return l2;
    } else if (!l2) {
        return l1;
    } else if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
        l2.next = mergeTwoLists(l2.next, l1);
        return l2;
    }
};

var l3 = mergeTwoLists(l1, l2)
//1.定义变量
var current = l3
var listString = ''
//2.循环获取一个个节点
while (current) {
    listString += current.val + ' '
    current = current.next
}
console.log(listString)//结果1 1 2 3 4 4

2.2方法2:迭代

//方法2:构造函数加原型来创建对象(更为自由,每个链表有一个头指针head)
function LinkedList() {
    //属性
    this.head = null
    //记录链表长度
    this.length = 0
    //内部类:节点类
    function ListNode(val) {
        this.val = val
        this.next = null
    }
    //1.追加方法
    LinkedList.prototype.append = function (val) {
        var newNode = new ListNode(val)
        if (this.length == 0) {
            this.head = newNode
        }
        else {
            var current = this.head
            while (current.next) {
                current = current.next
            }
            current.next = newNode
        }
        //3.length+1
        this.length += 1
    }
}
var l1 = new LinkedList()
l1.append(1)
l1.append(2)
l1.append(4)

var l2 = new LinkedList()
l2.append(1)
l2.append(3)
l2.append(4)
//迭代方法
const mergeTwoLists = (l1, l2) => {
    const newList = {
        val: -1,
        next: null,
    };
    let tempList = newList;
    while (l1 && l2) {
        if (l1.val <= l2.val) {
            tempList.next = l1;
            l1 = l1.next;
        } else if (l1.val > l2.val) {
            tempList.next = l2;
            l2 = l2.next;
        }
        tempList.next.next = null;
        tempList = tempList.next;
    }
    tempList.next = l1 || l2;
    return newList.next;
};
var l3 = mergeTwoLists(l1.head, l2.head)

//1.定义变量
var current = l3
var listString = ''
//2.循环获取一个个节点
while (current) {
    listString += current.val + ' '
    current = current.next
}
console.log(listString)结果1 1 2 3 4 4

3.参考

leetcode相关解法

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:50:25  更:2021-09-24 10:51:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 9:51:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码