【追求进步】两个链表的第一个公共结点
来源:互联网 发布:世界卫生组织数据库 编辑:程序博客网 时间:2024/06/05 17:30
题目描述
输入两个链表,找出它们的第一个公共结点。
在线代码:
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { /* 分析题意有三种方法: 第一种方法:即就是遍历m和n链表,一个结点一个结点的比较是否有重合,这样的时间复杂度o(m*n) 第二种方法:借用辅助栈的方法,即就是从链表的尾端开始比较,这样的需要借助的空间o(m+n),时间复杂度也是o(m+n) 第三种方法:先行法,即就是先知道m链表比n链表大多少,然后让长的链表先走几步,接下来一个个的比较,看是否相等 */ int length1=getListLength(pHead1); int length2=getListLength(pHead2); int diff=length1-length2; ListNode longListNode=pHead1; ListNode shortListNode=pHead2; if(diff<0){ //如果第二个链表长度大于第一个 longListNode=pHead2; shortListNode=pHead1; diff=length2-length1; } for(int i=0;i<diff;i++){ longListNode=longListNode.next; //让长链表先走diff步 } //两个链表一起走,直到相等,然后返回第一个相交的结点 while(longListNode!=null&&shortListNode!=null &&longListNode!=shortListNode){ longListNode=longListNode.next; shortListNode=shortListNode.next; } return longListNode; } //求链表长度,遍历一次链表!注意:只能是这样呢 public int getListLength(ListNode head){ int result=0; while(head!=null){ result++; head=head.next; } return result; }}
0 0
- 【追求进步】两个链表的第一个公共结点
- 找出两个链表的第一个公共结点--总结
- 找出两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 两个链表的第一个公共结点(剑指offer37)
- 【剑指offer】两个链表的第一个公共结点
- 题目1505:两个链表的第一个公共结点
- Particle filter People and code
- IT忍者神龟之MySQL数据库简单操作
- 一来是为给我爹看,他老人家每周必读本系列
- 如何开展业务是我在离开X网之后重新学的
- Android:Material Design - Style - Color(转)
- 【追求进步】两个链表的第一个公共结点
- 程序员应该知道的10大基础算法
- 渗透技巧——通过cmd上传文件的N种方法
- iOS开发应该选择Objective-C还是Swift
- IT忍者神龟之MySQL函数详细描述
- comparator接口与Comparable接口的区别
- Click Once不能正常安装的问题
- 参考文献的悬挂缩进
- 思考,思考,再思考