php实现找两个链表的第一个公共结点(实例演示)
2024-08-31 20:08:46
php实现找两个链表的第一个公共结点(实例演示)
一、总结
因为是链表,第一个节点公共之后,后面所有的节点都公共了
画个图实例演示一下,会超清晰且简单
二、php实现找两个链表的第一个公共结点
题目描述
输入两个链表,找出它们的第一个公共结点。
三、代码
代码一:
/*
找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走
(因为2个链表用公共的尾部)
*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
int len1 = findListLenth(pHead1);
int len2 = findListLenth(pHead2);
if(len1 > len2){
pHead1 = walkStep(pHead1,len1 - len2);
}else{
pHead2 = walkStep(pHead2,len2 - len1);
}
while(pHead1 != NULL){
if(pHead1 == pHead2) return pHead1;
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
return NULL;
}
int findListLenth(ListNode *pHead1){
if(pHead1 == NULL) return 0;
int sum = 1;
while(pHead1 = pHead1->next) sum++;
return sum;
}
ListNode* walkStep(ListNode *pHead1, int step){
while(step--){
pHead1 = pHead1->next;
}
return pHead1;
}
};
1->2->3->4->5->6->7->8
9->4->5->6->7->8
代码二:
用两个指针扫描”两个链表“,最终两个指针到达 null 或者到达公共结点。
不用记长度
两个链表一定有交点的话,方法是指向短链表指针先走完,然后指向长链表,指向长链表指针后走完,指向短链表。所以,第二次走过,一定会在交点相遇
如果两个链表的长度相同并且没有相同的结点,这是死循环
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
ListNode *p1 = pHead1;
ListNode *p2 = pHead2;
while(p1!=p2){
p1 = (p1==NULL ? pHead2 : p1->next);
p2 = (p2==NULL ? pHead1 : p2->next);
}
return p1;
}
};
1->2->3->4->5->6->7->8 9->4->5->6->7->8
9->4->5->6->7->8 1->2->3->4->5->6->7->8
最新文章
- LintCode Longest Common Subsequence
- NSMutableAttributedString的使用
- jquery获取checkbox的值并post提交
- Linux学习笔记17--Linux系统启动详解
- Ibatis.net防Sql注入
- OFBiz进阶之环境搭建(eclipse)
- 【转】cocos2d-x中锚点设置及定位方式
- Android添加桌面快捷方式的简单实现
- 解决PopupWindow遮住输入法
- Invert Binary Tree 解答
- Java单例模式的线程安全问题
- Spring Boot 系列教程16-数据国际化
- DOM4J介绍与代码示例(2)-XPath 详解
- 让getElementsByClassName兼容
- Secure backup
- [No0000171]wpf 类层次结构Class Hierarchy
- 解决ORA-00257: 归档程序错误。在释放之前仅限于内部连接
- 关于Unity中的光照(二)
- Android Studio添加so文件并打包到APK的lib文件夹中
- winRAR显示树树目录
热门文章
- jquery js解析函数、函数直接调用
- php课程 12-40 抽象类的作用是什么
- 23. Node.Js Buffer类(缓冲区)-(三)文件读取实例
- Impala的安装(含使用CM安装 和 手动安装)(图文详解)
- Win8.1恢复这台电脑里的6个文件夹
- Shiro学习总结(2)——Apache Shiro快速入门教程
- 设计模式六大原则(五):迪米特法则(Law Of Demeter)
- SpringMVC 传递相同名称的参数的最佳方法
- MySQLSocketPHPvimApache
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)