剑指offer37题(两个链表的第一个公共结点)
2017-12-25 14:00
302 查看
题目:输入两个链表,找出它们的第一个公共结点。
思路:首先要明白一点:如果两个单向链表有公共结点,那么这两个链表从某一结点开始,它们的next都指向同一个结点,及公共结点一定出现在链表的 尾部。
两种思路:
第一种是将两个链表的结点放入栈中,我们依次比较栈顶元素,找出公共结点出现的最后一个元素。
第二种是将直接遍历两个链表,得到其长度,长度相减得到链表的移动次数,移动之后再比较是否是公共结点。
代码:
思路:首先要明白一点:如果两个单向链表有公共结点,那么这两个链表从某一结点开始,它们的next都指向同一个结点,及公共结点一定出现在链表的 尾部。
两种思路:
第一种是将两个链表的结点放入栈中,我们依次比较栈顶元素,找出公共结点出现的最后一个元素。
第二种是将直接遍历两个链表,得到其长度,长度相减得到链表的移动次数,移动之后再比较是否是公共结点。
代码:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindFirstCommonNode(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=0; flag = count1-count2; if(flag<=0){ while (flag<0){ pHead2 = pHead2.next; flag++; } while(pHead1 != pHead2) { pHead1 = pHead1.next; pHead2 = pHead2.next; } return pHead1; } if(flag>0){ while (flag>0){ pHead1 = pHead1.next; flag--; } while(pHead1 != pHead2){ pHead1 = pHead1.next; pHead2 = pHead2.next; } return pHead1; } return null; } }
相关文章推荐
- 【九度OJ1505】|【剑指offer37】两个链表的第一个公共结点
- 两个链表的第一个公共结点(剑指offer37)
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
- 37-两个链表的第一个公共结点
- 剑指Offer——(36)两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 面试题37 两个链表的第一个公共结点
- 面试题41:两个链表的第一个公共结点
- 算法-寻找两个链表的第一个公共结点
- 剑指offer-37 两个链表的第一个公共结点
- 程序员面试题精选100题(35)-找出两个链表的第一个公共结点
- 剑指Offer(Java版):两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 剑指offer——两个链表的第一个公共结点(给出的方法,都是针对有且只有一个公共节点的方法)
- 面试题37_两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 剑指Offer35 两个链表第一个公共结点
- 【链表】两个链表的第一个公共结点
- 33、两个链表的第一个公共结点
- 【追求进步】两个链表的第一个公共结点