[PHP] 算法-找出两个链表的第一个公共结点的PHP实现
输入两个链表,找出它们的第一个公共结点
1.两个单链表,有公共结点,那么必然,尾部公用
2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值
3.长的链表先走n步,两个链表再同时移动
4.两个链表相交点就是第一个公共结点 list1 list2
len1 len2 if len1 > len2
n=len1-len2
for i=0;i<n;i++
list1=list1->next
else
n=len2-len1
for i=0;i<n;i++
list2=list2->next while list1!=null
if list1==list2
return list1
list1=list1->next
list2=list2->next
return null
<?php
class Node{
public $data;
public $next;
public function __construct($data=""){
$this->data=$data;
}
}
//构造一个链表
$linkList1=new Node();
$linkList1->next=null;
$temp=$linkList1; $node1=new Node(1);
$temp->next=$node1;
$temp=$node1; $node2=new Node(2);
$temp->next=$node2;
$temp=$node2; $node3=new Node(3);
$temp->next=$node3;
$temp=$node3; $node4=new Node(4);
$temp->next=$node4;
$temp=$node4; $node5=new Node(5);
$temp->next=$node5;
$node5->next=null; //构造一个和上面有公共结点的链表
$linkList2=new Node();
$linkList2->next=null;
$temp=$linkList2; $node7=new Node(7);
$temp->next=$node7;
$node7->next=$node4;//链向上面链表的第四个结点 var_dump($linkList1);
var_dump($linkList2);
$commonNode=FindFirstCommonNode($linkList1,$linkList2);
var_dump($commonNode);
//找第一个公共结点
function FindFirstCommonNode($pHead1, $pHead2){
//链表1的长度
$len1=0;
$temp=$pHead1->next;
while($temp!=null){
$temp=$temp->next;
$len1++;
}
//链表2的长度
$len2=0;
$temp=$pHead2->next;
while($temp!=null){
$temp=$temp->next;
$len2++;
}
$list1=$pHead1->next;
$list2=$pHead2->next;
//长的链表先走n步
if($len1 > $len2){
$n=$len1-$len2;
for($i=0;$i<$n;$i++){
$list1=$list1->next;
}
}else{
$n=$len2-$len1;
for($i=0;$i<$n;$i++){
$list2=$list2->next;
} }
//两个链表长度一致,同时走,第一个相同的点就是第一个公共结点
while($list1!=null){
if($list1==$list2){
return $list1;
}
$list1=$list1->next;
$list2=$list2->next;
}
return null;
}
object(Node)#1 (2) {
["data"]=>
string(0) ""
["next"]=>
object(Node)#2 (2) {
["data"]=>
int(1)
["next"]=>
object(Node)#3 (2) {
["data"]=>
int(2)
["next"]=>
object(Node)#4 (2) {
["data"]=>
int(3)
["next"]=>
object(Node)#5 (2) {
["data"]=>
int(4)
["next"]=>
object(Node)#6 (2) {
["data"]=>
int(5)
["next"]=>
NULL
}
}
}
}
}
}
object(Node)#7 (2) {
["data"]=>
string(0) ""
["next"]=>
object(Node)#8 (2) {
["data"]=>
int(7)
["next"]=>
object(Node)#5 (2) {
["data"]=>
int(4)
["next"]=>
object(Node)#6 (2) {
["data"]=>
int(5)
["next"]=>
NULL
}
}
}
}
object(Node)#5 (2) {
["data"]=>
int(4)
["next"]=>
object(Node)#6 (2) {
["data"]=>
int(5)
["next"]=>
NULL
}
}
[PHP] 算法-找出两个链表的第一个公共结点的PHP实现的更多相关文章
- Java找出两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点. 我的思路:因为是链表,长度都是未知的,不能盲目的两个一起开始自增判断. 首先需要得到 L1的长度 和 L2的长度,让较长的那个先走 (length1- ...
- 编程算法 - 两个链表的第一个公共结点 代码(C)
两个链表的第一个公共结点 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入两个链表, 找出它们的第一个公共结点. 计算链表的长度, 然后移动 ...
- php实现找两个链表的第一个公共结点(实例演示)
php实现找两个链表的第一个公共结点(实例演示) 一.总结 因为是链表,第一个节点公共之后,后面所有的节点都公共了 画个图实例演示一下,会超清晰且简单 二.php实现找两个链表的第一个公共结点 题目描 ...
- 剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- 《剑指offer》第五十二题(两个链表的第一个公共结点)
// 面试题52:两个链表的第一个公共结点 // 题目:输入两个链表,找出它们的第一个公共结点. #include <iostream> #include "List.h&quo ...
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...
- 【剑指offer】面试题 52. 两个链表的第一个公共结点
面试题 52. 两个链表的第一个公共结点 NowCoder 题目描述 输入两个链表,找出它们的第一个公共结点. Java 实现 ListNode Class class ListNode { int ...
随机推荐
- 搭建repo服务器和上传源码
https://blog.csdn.net/qq_28449863/article/details/79992191 https://blog.csdn.net/qq_28449863/article ...
- 前端之html概述及基本结构
html概述: HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标 ...
- Dockerfile 构建容器
本文是最简单的Dockerfile教程,创建tomcat容器,并跑自己的java程序 首先需要准备几个东西 1.你的java web(test.war) 程序,最好打包成一个 war:(主要是没测试 ...
- Alpha冲刺 - (4/10)
Alpha冲刺 - (4/10) Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 ...
- Alpha冲刺-(9/10)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...
- 团队博客-第六周:Alpha阶段项目复审(只会嘤嘤嘤队)
小组名 题目 优点 缺点 排名 小谷围驻广东某工业719电竞大队 广工生活社区 功能多样,设计完整,实用,界面美观 界面风格不够统一,当前时间系统尚未发布 1 大猪蹄子队 四六级背单词游戏 界面十分美 ...
- MySQL--事务隔离级别RR和RC的异同
在MySQL中,事务隔离级别RC(read commit)和RR(repeatable read)两种事务隔离级别基于多版本并发控制MVCC(multi-version concurrency con ...
- iOS 抓包
通过tcpdump对iOS进行流量分析(无需越狱 iOS Packet Tracing 将 iOS 设备通过 USB 连接到 Mac 打开 terminal rvictl -s $UDID 运行 tc ...
- javaweb中的乱码问题
0.为什么需要编码,解码, 无论是图片,文档,声音,在网络IO,磁盘io中都是以字节流的方式存在及传递的,但是我们拿到字节流怎么解析呢?这句话就涉及了编码,解码两个过程,从字符数据转化为字节数据就是编 ...
- SpringBoot swagger-ui.html 配置类继承 WebMvcConfigurationSupport 类后 请求404
1 .SpringBoot启动类加上 注解 @EnableWebMvc @SpringBootApplication@EnableWebMvc public class Application { ...