剑指offer——两个链表的第一个公共结点
来源:互联网 发布:java 读取表单文件 编辑:程序博客网 时间:2024/06/05 09:42
题目描述:
输入两个链表,找出它们的第一个公共结点。
思路:
由于是单链表,所以可以发现从第一个公共节点开始,后面的结点都是相同的,一种思路是从两个链表的尾部开始遍历,直到发现最后一个相同的结点为止,那么这最后一个相同的结点是单链表的角度看就是两个链表的第一个公共节点了。还有一种思路是不需要从尾部开始遍历,毕竟从尾部遍历单链表的话还得使用反转链表的方法进行操作,首先计算出两个链表的长度,让更长的那个单链表先移动两个链表长度差值个位置,然后两个链表同时移动,从更短的那个链表的第一个位置开始遍历,两个链表都往后移动,当发现第一个相同的结点的值的时候,那么该节点就是第一个公共节点了。
算法实现:
/*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; }}
1 0
- 【剑指offer】两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 《剑指offer》两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- [剑指offer]两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 剑指offer|两个链表的第一个公共结点
- 剑指offer-两个链表的第一个公共结点
- 《剑指offer》-两个链表的第一个公共结点
- 剑指Offer: 两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指Offer------两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 使用STL进行字符串分割(C++)
- Android自定义类似ProgressDialog效果的Dialog
- Python时间性能测量 time.clock() time.time() timeit.timeit()
- 深度学习
- easyui的datagrid显示或隐藏列
- 剑指offer——两个链表的第一个公共结点
- 数据库高级操作
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- python面向对象例子
- 约瑟夫环问题
- 风筝的研究
- 345. Reverse Vowels of a String
- dubbo异步调用传递性问题的解决方案
- ]iOS开发学习路径的一些建议