剑指offer——两个链表的第一个公共结点
2016-07-27 15:46
295 查看
题目描述:
输入两个链表,找出它们的第一个公共结点。思路:
由于是单链表,所以可以发现从第一个公共节点开始,后面的结点都是相同的,一种思路是从两个链表的尾部开始遍历,直到发现最后一个相同的结点为止,那么这最后一个相同的结点是单链表的角度看就是两个链表的第一个公共节点了。还有一种思路是不需要从尾部开始遍历,毕竟从尾部遍历单链表的话还得使用反转链表的方法进行操作,首先计算出两个链表的长度,让更长的那个单链表先移动两个链表长度差值个位置,然后两个链表同时移动,从更短的那个链表的第一个位置开始遍历,两个链表都往后移动,当发现第一个相同的结点的值的时候,那么该节点就是第一个公共节点了。算法实现:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { //首先计算两个链表的长度 int listLen1 = 0; int listLen2 = 0; ListNode temp = pHead1; while(temp!=null){ listLen1++; temp = temp.next; } temp = pHead2; while(temp!=null){ listLen2++; temp = temp.next; } ListNode longList = null; ListNode shortList = null; int k = 0; //长链表与短链表的差值 if((listLen1-listLen2)>=0){ longList = pHead1; shortList = pHead2; k = listLen1-listLen2; }else{ longList = pHead2; shortList = pHead1; k = listLen2-listLen1; } for(int i=0;i<k;i++){ longList = longList.next; } while(shortList!=null&&(shortList.val!=longList.val)){ shortList = shortList.next; longList = longList.next; } return shortList; } }
相关文章推荐
- javascript --创建对象的9种方式
- jQuery的Ajax
- 【整理】HTML5中部分新标签
- html5中nav元素的使用方法
- Html5 杂记
- DIV+CSS与表格建站的差别
- Netty源码解读(四)Netty与Reactor模式
- html常用功能
- js简单校验
- Netty源码解读(二)Netty中的buffer
- CSS图片垂直居中方法
- mac开启safari开发模式(用于OC和JS交互)
- html5中section元素的使用方法
- webdataBase
- @-ms-viewport
- CSS Sprites
- (五)在前端增加相应代码显示文档
- html5中article元素的使用方法
- jQuery hover方法
- Node.js exports 和 require 两个对象