聊一聊合并两个排序的链表

域名2025-11-05 12:14:3527
前言

给定两个递增排序的聊聊两链表,如何将这两个链表合并?合并合并后的链表依然按照递增排序。本文就跟大家分享一种解决方案,排序欢迎各位感兴趣的聊聊两开发者阅读本文。

思路分析

经过前面的合并学习,我们知道了有关链表的排序操作可以用指针来完成。同样的聊聊两,这个问题也可以用双指针的合并思路来实现:

p1指针指向链表1的头节点p2指针指向链表2的头节点

声明一个变量存储合并后的链表,比对两个指针指向的排序节点值大小:

如果p1指针指向的节点值比p2指向的值小,合并后的聊聊两链表节点就取p1节点的值,p1指针继续向前走,合并进行下一轮的排序比对。如果p2指针指向的聊聊两节点值比p1指向的WordPress模板值小,合并后的合并链表节点就取p2节点的值,p2指针继续向前走,排序进行下一轮的比对。当p1节点指向null时,合并后的链表节点就为p2所指向的链表节点;当p2节点指向null时,合并后的链表节点就为p1所指向的链表节点。

实现代码

看完上述分析后,聪明的开发者已经想到代码怎么写了。没错,这就是典型的递归思路,代码如下:

声明一个函数MergeLinkedList,它接受2个参数:递增排序的链表1,递增排序的链表2。递归的基线条件:链表1为null就返回链表2,链表2为null就返回链表1。免费信息发布网声明一个变量pMergedHead用于存储合并后的链表头节点。如果当前链表1的节点值小于链表2的节点值。

pMergedHead的值就为链表2的节点值。

pMergedHead的下一个节点值就为链表1的下一个节点和链表2的节点值比对后的值(递归)。

否则

pMergedHead的值就为链表1的节点值。

pMergedHead的下一个节点值就为链表2的下一个节点和链表1的节点值比对后的值(递归)。

最后,返回pMergedHeadexport function MergeLinkedList(

firstListHead: ListNode | null,

secondListHead: ListNode | null

): ListNode | null {

// 基线条件

if (firstListHead == null) {

return secondListHead;

}

if (secondListHead == null) {

return firstListHead;

}

let pMergedHead: ListNode | null = null;

if (firstListHead.element < secondListHead.element) {

pMergedHead = firstListHead;

pMergedHead.next = MergeLinkedList(firstListHead.next, secondListHead);

} else {

pMergedHead = secondListHead;

pMergedHead.next = MergeLinkedList(firstListHead, secondListHead.next);

}

return pMergedHead;

}测试用例

接下来,我们用思路分析章节中的例子来测试下我们的代码能否正常执行。

const firstLinkedList = new LinkedList();

firstLinkedList.push(1);

firstLinkedList.push(3);

firstLinkedList.push(5);

firstLinkedList.push(7);

firstLinkedList.push(9);

const secondLinkedList = new LinkedList();

secondLinkedList.push(2);

secondLinkedList.push(4);

secondLinkedList.push(6);

secondLinkedList.push(8);

const resultListHead = MergeLinkedList(

firstLinkedList.getHead(),

secondLinkedList.getHead()

);

console.log(resultListHead);

示例代码

本文所列举的代码,其完整版请移步:

MergeLinkedList.tsMergeLinkedList-test.ts网站模板
本文地址:http://www.bzve.cn/news/482a62798890.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

将电脑光驱改装为音响的教程(简单改装让电脑光驱释放出音响魅力,探索DIY的乐趣)

最全面的C/C++编码规范总结

如何在2016年成为一个更好的Node.js开发者

PHP爬虫:百万级别知乎用户数据爬取与分析

遇见响尾蛇(被响尾蛇咬伤后的后果及应对措施)

开源数据挖掘工具,有这6个就足够

不要和一种编程语言厮守终生:为工作正确选择

Go+ 可有效补全 Python 的不足

友情链接

滇ICP备2023006006号-39