剑指offer 两个链表的第一个公共结点
2018-02-11 23:22
253 查看
题目描述
输入两个链表,找出它们的第一个公共结点。思路:找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走(因为2个链表用公共的尾部)/*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 len1 = findListLenth(pHead1);
int len2 = findListLenth(pHead2);
ListNode current1 = pHead1;
ListNode current2 = pHead2;
// 先在长链表上走上几步,在同时在两个链表上遍历
if (len1 - len2 > 0)
current1 = walkStep(current1, len1 - len2);
else
current2 = walkStep(current2, len2 - len1);
while (current1 != null && current2 != null) {
if (current1 == current2)
return current1;
current1 = current1.next;
current2 = current2.next;
}
return null;
}
private ListNode walkStep(ListNode cur, int step) {
// 从step~1
while (step-- > 0)
cur = cur.next;
return cur;
}
// 计算链表长度
private int findListLenth(ListNode head) {
if (head == null)
return 0;
ListNode cur = head;
int length = 0;
while (cur != null) {
length++;
cur = cur.next;
}
return length;
}
}
相关文章推荐
- 剑指offer34--两个链表第一个公共结点
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 剑指offer 面试题37 两个链表的第一个公共结点
- 剑指Offer(Java版):两个链表的第一个公共结点
- 剑指offer 36 两个链表的第一个公共结点
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题37:两个链表的第一个公共结点
- 剑指offer--两个链表的第一个公共结点
- 剑指Offer之 - 两个链表的第一个公共结点
- 剑指offer---两个链表的第一个公共结点
- 剑指offer-两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点
- 剑指offer——面试题37:两个链表的第一个公共结点
- [剑指offer]两个链表的第一个公共结点
- 剑指offer:两个链表第一个公共结点
- 剑指offer_链表---两个链表的第一个公共结点
- 剑指Offer——两个链表的第一个公共结点
- 【剑指offer】两个链表的第一个公共结点
- 剑指offer 两个链表的第一个公共结点
- 剑指Offer------两个链表的第一个公共结点