<?php
/**
* Created by PhpStorm.
* User: huizhou
* Date: 2018/12/2
* Time: 15:29
*/ /**
* 合并两个有序链表
* 思路:简单的合并排序。由于链表本来就是递增的,所以每次将两个链表中较小的部分拿过来就可以了。
*/ class MergeNode{
private $next;
private $value; public function __construct($value = null)
{
$this->value = $value;
} public function getValue(){
return $this->value;
} public function setValue($value){
$this->value = $value;
} public function getNext(){
return $this->next;
} public function setNext($next){
$this->next = $next;
} } function test(){ // 创建两个有序的链表 $linkList=new MergeNode(); $linkList->setNext(null); $temp=$linkList; for($i=1;$i<=10;$i+=2){ $node=new MergeNode(); $node->setValue($i); $node->setNext(null); $temp->setNext($node); $temp=$node; } //第二个有序的链表
$list2=new MergeNode(); $temp=$list2; for($i=2;$i<=10;$i+=2){ $node=new MergeNode(); $node->setValue($i); $node->setNext(null); $temp->setNext($node); $temp=$node; } $result = Merge($linkList,$list2); while($result != null){
if($result->getValue()){
echo $result->getValue() .",";
}
$result = $result->getNext();
} } test(); /**
* 合并两个有序链表
* @param MergeNode $pHead1
* @param MergeNode $pHead2
* @return MergeNode
*/
function Merge(MergeNode $pHead1,MergeNode $pHead2){ if($pHead1 == null){
return $pHead2;
} if($pHead2 == null){
return $pHead1;
} if($pHead1->getValue() < $pHead2->getValue()){
$resultHead = $pHead1;
$pHead1 = $pHead1->getNext();
}else{
$resultHead = $pHead2;
$pHead2 = $pHead2->getNext();
} $pre = $resultHead;
while ($pHead1 && $pHead2){ if($pHead1->getValue() <= $pHead2->getValue()){
$pre->setNext($pHead1);
$pHead1 = $pHead1->getNext();
$pre = $pre->getNext();
}else{
$pre->setNext($pHead2);
$pHead2 = $pHead2->getNext();
$pre = $pre->getNext();
} } if($pHead1 != null){
$pre->setNext($pHead1);
} if($pHead2 !=null){
$pre->setNext($pHead2);
} return $resultHead; }

php链表笔记:合并两个有序链表的更多相关文章

  1. 【Leetcode链表】合并两个有序链表(21)

    题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-> ...

  2. 【LeetCode题解】21_合并两个有序链表

    目录 21_合并两个有序链表 描述 解法一:迭代 思路 Java 实现 Python 实现 解法二:递归 思路 Java 实现 Python 实现 21_合并两个有序链表 描述 将两个有序链表合并为一 ...

  3. leetcode 21 Merge Two Sorted Lists 合并两个有序链表

    描述: 合并两个有序链表. 解决: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1) return l2; if (!l2) ...

  4. Leecode刷题之旅-C语言/python-21.合并两个有序链表

    /* * @lc app=leetcode.cn id=21 lang=c * * [21] 合并两个有序链表 * * https://leetcode-cn.com/problems/merge-t ...

  5. LeetCode初级算法--链表02:合并两个有序链表

    LeetCode初级算法--链表02:合并两个有序链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  6. <每日 1 OJ> -LeetCode 21. 合并两个有序链表

    题目: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4输出:1->1-> ...

  7. 算法练习之合并两个有序链表, 删除排序数组中的重复项,移除元素,实现strStr(),搜索插入位置,无重复字符的最长子串

    最近在学习java,但是对于数据操作那部分还是不熟悉 因此决定找几个简单的算法写,用php和java分别实现 1.合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两 ...

  8. LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)

    21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...

  9. leecode刷题(23)-- 合并两个有序链表

    leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2-> ...

随机推荐

  1. unittest(2)

    测试用例执行顺序 1.setUp和tearDown相关 setUp:表示前置条件,它在每一个用例执行之前必须会执行一次        setUp可以理解为我们需要自动化测试时,需要打开网页窗口,输入对 ...

  2. 批量调用百度地图API获取地址经纬度坐标

    1 申请密匙 注册百度地图API:http://lbsyun.baidu.com/index.php?title=webapi 点击左侧 “获取密匙” ,经过填写个人信息.邮箱注册等,成功之后在开放平 ...

  3. UVA Ananagrams /// map set

    https://vjudge.net/problem/UVA-156 题目大意: 输入文本,找出所有满足条件的单词——该单词不能通过字母重排而得到输入的文本中的另外一个单词. 在判断是否满足条件时,字 ...

  4. 【校OJ】选网线

    暑假学校OJ上的题目. 一道很有意思的二分. 题意:三个数组,每个数组各选一个数出来看是否能组成目标数. 题解:前两个数组两两的和组合一下,二分第三个数组,找是否能组成目标数. 代码: #includ ...

  5. weblogic上传木马路径选择

    对于反序列化漏洞,如果获得的是系统权限或者root权限,那就没必要上传木马,但如果只是web安装应用的权限,就上传获取更大权限. 上传需要找到几个点,获取物理路径,如下面三种: 方法1:把shell写 ...

  6. oracle union 和 union all

    java.sql.SQLSyntaxErrorException: ORA-01789: 查询块具有不正确的结果列数 原因: 发现是sql语句用union时的 两个语句查询的字段不一致 解决:将 2个 ...

  7. Ubuntu18.04安装RTX2080Ti+NVIDIA驱动+CUDA

    Ubuntu18.04安装RTX 2080Ti 与 Cuda10 ==========血泪更新========= 如果可以使用ppa安装最方便了 具体参考:https://www.cnblogs.co ...

  8. 9_山寨系统调用 SystemCallEntry

    思想: 再次在 GDT 中偷内存 搭建 系统调用需要的 逻辑框架与功能实现: 基本分解妄想: 构建系统调用的代码: 拷贝到 偷取的内存中: idt 向量 序号21位置: 8003ee00`0008f1 ...

  9. 从别人git下载项目下来然后运行

    1点击clone or  download 2.自由选择 3.拉到你想放的位置,我是放到桌面上的 4. cmd 打开,进入你 的下载到桌面的项目 5. # install dependencies n ...

  10. Android开发 navigation的跳转动画实现

    前言 此篇博客只简短的介绍navigation如何添加跳转页面的动画属性,如果你还为接触了解过navigation.建议你看我另一篇博客Android开发 navigation入门详解 创建动画xml ...