两个链表的第一个公共结点
来源:互联网 发布:匈牙利算法时间复杂度 编辑:程序博客网 时间:2024/06/06 05:19
题目描述
输入两个链表,找出它们的第一个公共结点。
题目解析
如果两个链表有公共结点,那么两个链表公共结点之后的结点也都相同,那么两个链表交叉后一定是一个Y型,所以如果我们将两个链表放到两个栈里边,当我们从栈里边同时出栈两个链表的结点,直到最后一个相同的结点,这是算法1。对于两个不同的链表,有公共结点的话,那么如果我们先遍历一个较长的链表,让两个链表剩下的结点个数相同,那么我们只需要同时遍历两个链表,直到第一个相同的结点。
代码如下:
public static ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if (pHead1 == null || pHead2 == null) { return null; } Stack<ListNode> stack1 = new Stack<>(); Stack<ListNode> stack2 = new Stack<>(); ListNode temp = pHead1; while (temp != null) { stack1.push(temp); temp = temp.next; } temp = pHead2; while (temp != null) { stack2.push(temp); temp = temp.next; } temp = null; ListNode node1 = null; ListNode node2 = null; while (stack1.size() > 0 && stack2.size() > 0){ node1 = stack1.pop(); node2 = stack2.pop(); if (node1.val == node2.val && node1.next == node2.next){ temp = node1; }else{ break; } } return temp; } public ListNode FindFirstCommonNode2(ListNode pHead1, ListNode pHead2) { if (pHead1 == null||pHead2 == null) { return null; } int count1 = 0; ListNode p1 = pHead1; while (p1!=null){ p1 = p1.next; count1++; } int count2 = 0; ListNode p2 = pHead2; while (p2!=null){ p2 = p2.next; count2++; } int flag = count1 - count2; if (flag > 0){ while (flag>0){ pHead1 = pHead1.next; flag --; } while (pHead1!=pHead2){ pHead1 = pHead1.next; pHead2 = pHead2.next; } return pHead1; } if (flag <= 0){ while (flag<0){ pHead2 = pHead2.next; flag ++; } while (pHead1 != pHead2){ pHead2 = pHead2.next; pHead1 = pHead1.next; } return pHead1; } return null; }
0 0
- 找出两个链表的第一个公共结点--总结
- 找出两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 两个链表的第一个公共结点(剑指offer37)
- 【剑指offer】两个链表的第一个公共结点
- 题目1505:两个链表的第一个公共结点
- 两个链表的第一个公共结点
- Android-Activity
- 【C语言简单说】二:第一个C语言程序详解(2)
- Plugin with id 'com.android.application' not found.
- 压缩流的简单应用
- Android画折线图、柱状图、饼图(使用achartengine.jar)
- 两个链表的第一个公共结点
- Android简历模板
- PTA5-53 两个有序序列的中位数
- CCF之高速公路(java)
- 如何阅读SOUI源码
- I.P.B与DTS.PTS
- 5、web(js):JS中的$符号
- AngularJs常见内置指令 自定义指令
- 当Behavior 遭遇RecyclerView嵌套RecyclerView