PHP实现合并两个排序链表的方法

yizhihongxing

PHP实现合并两个排序链表的方法

1. 思路

  • 定义一个新的链表,用来存放合并后的元素
  • 依次比较两个链表中的元素大小,较小的元素作为新链表的头节点,将其后继指向较大元素的头节点
  • 重复以上步骤,直到其中一个链表为空
  • 将非空链表的剩余元素依次加入到新链表的末尾

2. 代码实现

class ListNode {
    public $val = 0;
    public $next = null;
    function __construct($val) {
        $this->val = $val;
    }
}

function mergeTwoLists($l1, $l2) {
    // 定义一个新的链表,用来存放合并后的元素
    $dummy = new ListNode(0);
    $cur = $dummy;
    // 依次比较两个链表中的元素大小
    while ($l1 && $l2) {
        if ($l1->val < $l2->val) {
            $cur->next = $l1;
            $l1 = $l1->next;
        } else {
            $cur->next = $l2;
            $l2 = $l2->next;
        }
        $cur = $cur->next;
    }
    // 将非空链表的剩余元素依次加入到新链表的末尾
    if ($l1) {
        $cur->next = $l1;
    }
    if ($l2) {
        $cur->next = $l2;
    }
    // 返回合并后的链表
    return $dummy->next;
}

3. 示例说明

示例一

$l1 = new ListNode(1);
$l1->next = new ListNode(3);
$l1->next->next = new ListNode(5);

$l2 = new ListNode(2);
$l2->next = new ListNode(4);
$l2->next->next = new ListNode(6);

$mergedList = mergeTwoLists($l1, $l2);
while ($mergedList) {
    echo $mergedList->val . " ";
    $mergedList = $mergedList->next;
}
// 输出结果:1 2 3 4 5 6

示例二

$l1 = new ListNode(1);
$l1->next = new ListNode(2);
$l1->next->next = new ListNode(3);

$l2 = new ListNode(4);
$l2->next = new ListNode(5);
$l2->next->next = new ListNode(6);

$mergedList = mergeTwoLists($l1, $l2);
while ($mergedList) {
    echo $mergedList->val . " ";
    $mergedList = $mergedList->next;
}
// 输出结果:1 2 3 4 5 6

两个示例中,我们分别定义了两个链表,调用mergeTwoLists函数将两个链表合并。

第一个示例中,$l1链表的元素值为1、3、5,$l2链表的元素值为2、4、6,最终合并后的结果为1、2、3、4、5、6。

第二个示例中,$l1链表的元素值为1、2、3,$l2链表的元素值为4、5、6,最终合并后的结果同样为1、2、3、4、5、6。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现合并两个排序链表的方法 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • php的declare命令及用法详解

    下面就为您详细讲解一下PHP的declare命令及用法。 什么是declare命令? 针对PHP5.3以上版本,PHP引入了declare语句,通常称为declare命令。它可以让我们在PHP中开启和关闭一些指定的扩展。 声明语法 declare (directive) 其中directive可以理解为是php.ini配置文件中的一些指令,它可以是下列四个之…

    PHP 2023年5月25日
    00
  • 迅雷下载种子变成php文件该怎么办?

    当我们使用迅雷下载时,可能会遇到种子文件突然变成了一个以php结尾的文件,导致无法正常下载。这时候,我们可以按照以下步骤来解决该问题: 查看迅雷下载的目录 首先,我们需要找到迅雷下载的目录。一般来说,迅雷下载的文件会保存在以下目录中: Windows系统:C:\Users\用户名\Downloads\Thunder Network Mac OS X系统:~/…

    PHP 2023年5月26日
    00
  • php echo 输出字符串函数详解

    PHP echo 输出字符串函数详解 1. 简介 echo 是 PHP 中用于输出字符串的函数,它可以输出一个或多个字符串,可以输出 HTML 标签和 PHP 变量的值。 2. 语法 echo 函数的语法如下: echo string; 其中,string 是要输出的字符串,可以是变量,常量和拼接后的字符串。 3. 示例 3.1 输出字符串 以下示例演示了如…

    PHP 2023年5月26日
    00
  • php按单词截取字符串的方法

    PHP 按单词截取字符串的方法,一般可以使用 explode 函数来完成。具体步骤如下: 使用 explode 函数把字符串按照空格划分成一个一个的单词,返回数组形式,代码如下: $words = explode(‘ ‘, ‘I love coding in PHP’); 再使用 implode 函数把前几个单词拼接在一起,代码如下: $newString …

    PHP 2023年5月26日
    00
  • 微信小程序动态添加分享数据

    标题:如何动态添加微信小程序分享数据 在微信小程序中,我们可以通过使用JS-SDK和自定义转发来实现动态添加分享数据。下面将详细介绍如何实现这个功能。 步骤1:配置JS-SDK 在小程序入口页面的onLoad生命周期中,调用微信官方提供的wx.config方法配置JS-SDK。如下所示: wx.config({ debug: false, appId: ‘y…

    PHP 2023年5月30日
    00
  • PHP curl实现抓取302跳转后页面的示例

    下面是详细讲解“PHP curl实现抓取302跳转后页面的示例”的完整攻略。 什么是302跳转 302跳转是HTTP的一种状态码,在HTTP协议中,每个状态码都有特定的含义,302表示请求的资源已经被临时移动到了一个新的地址(URL),客户端需要重新发起请求获取资源。 PHP curl实现抓取302跳转后页面的步骤 要使用PHP curl来抓取302跳转后的…

    PHP 2023年5月27日
    00
  • php实现快速对二维数组某一列进行组装的方法小结

    首先我们先来了解一下问题的背景。 在PHP中,为了方便处理数据,我们通常会使用二维数组来存储各种信息,而且这个二维数组的各列往往意义不同,需要按照某一列进行分组、筛选、累计等操作。因此,我们需要一种快速对某一列进行组装的方法,以便更方便地进行数据处理。 接下来,我们来讲解一下具体的实现方法。这里我们可以采用PHP array_column函数的方式来实现。 …

    PHP 2023年5月26日
    00
  • php urlencode()与urldecode()函数字符编码原理详解

    PHP urlencode()与urldecode()函数字符编码原理详解 简介 在使用PHP进行Web开发时,处理URL编码通常是必要的。PHP内置的urlencoce()和urldecode()函数提供了处理URL编码的便利方法。本文将详细介绍urlencode()和urldecode()函数的原理和使用方法。 urlencode() urlencode…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部