剑指offer——两个链表的第一个公共结点
来源:互联网 发布:遗传算法tspmatlab程序 编辑:程序博客网 时间:2024/06/09 16:54
题目:输入两个链表,找出它们的第一个公共结点。
分析:看到题目我们会想到最简单的一种方法,就是从头开始对两个链表进行遍历,对每一对结点进行比较,直到返回相同的结点,但是这种方法的时间复杂度相当高,如果链表的长度分别为m、n,那么时间复杂度为O(mn),这显然是很浪费资源的,在面试中也是不可取的。所以我们开始考虑第二种方法:如果是将链表从末尾向头部进行比较的话,那么可以有效降低时间复杂度,使用栈就能很好地解决这个问题,因为栈的先入后出的特点,使用栈就能解决这个问题,我们可以将每个结点先入栈,然后再出站进行对比,这样的话就能很好地解决这个问题。但是在这里我要使用第三种方法来解决这个问题,我们首先先来观察一下这个双链表的结构。
我们可以先求出两个链表的大小,然后将较长的链表先去掉多余的那一部分,然后两个链表再开始比较,这样的话时间复杂度为O(m+n),这是一般面试可以接受的一种算法
public class FindFirstCommonNode {//这是求出链表长度的函数,返回链表长度public int getLength(Node node){int length=0;if(node.next!=null){node=node.next;length++;}return length;}public Node FindFirstCommonNode(Node node1,Node node2){//首先确定两个链表的长度int length1=getLength(node1);int length2=getLength(node2);int nlength=0;Node pNode1=null;Node pNode2=null;if(length1>length2){nlength=length1-length2;pNode1=node1;pNode2=node2;}else{nlength=length2-length1;pNode1=node2;pNode2=node1;}//先在长链表上走几步,再对两个链表进行比较for(int i=0;i<nlength-1;i++){pNode1=pNode1.next;}//两个链表开始比较while((pNode1!=null)&&(pNode2!=null)&&(pNode1!=pNode2)){pNode1=pNode1.next;pNode2=pNode2.next;}//得到第一个公共结点Node newNode=pNode1;return newNode;}}
阅读全文
0 0
- 【剑指offer】两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 《剑指offer》两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- [剑指offer]两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 剑指offer|两个链表的第一个公共结点
- 剑指offer-两个链表的第一个公共结点
- 《剑指offer》-两个链表的第一个公共结点
- 剑指Offer: 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指Offer------两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 非常酷炫的黑客雨 链表实现
- AndroidStudio 2.3.3 百度云盘地址
- 树莓派ubuntu mate 修改屏幕解析度为800x480
- ubuntu 安装redis3.2 配置远程连接
- 我奋斗了18年才和你坐在一起喝咖啡
- 剑指offer——两个链表的第一个公共结点
- muduo读书笔记03
- 游戏编程入门(16):教游戏思考
- 解决docker中容器安装软件报E: Unable to locate package的错误
- HDU 1812 Count the Tetris (Polya计数,高精度)
- 你凭什么上北大
- day09 JavaScrip
- Python中控制语句
- Android 常用工作命令