输入两个链表,找出它们的第一个公共结点

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        ListNode head = pHead1;
        Set<ListNode> res= new HashSet<ListNode>();
        while(head!=null){
            res.add(head);
            head = head.next;
        }
        head = pHead2;
        while(head!=null){
            if(res.contains(head))
                break;
            head = head.next;
        }
        return head;
    }
}

求出两个链表长度差

import java.util.*;
/*
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=0,len2=0;
        ListNode head = pHead1;
        while(head!=null){
            len1++;
            head = head.next;
        }
        head = pHead2;
        while(head!=null){
            len2++;
            head = head.next;
        }
        ListNode maxList=null,minList=null;
        int lenc = Math.abs(len1-len2);
        if(len1>=len2){
            maxList = pHead1;
            minList = pHead2;
        }
        if(len2>len1){
            maxList = pHead2;
            minList = pHead1;
        }
        while(lenc!=0){
            maxList = maxList.next;
            lenc--;
        }
        while(maxList!=minList){
            maxList = maxList.next;
            minList = minList.next;
        }
        return maxList;
    }
}

原文地址:https://www.cnblogs.com/a1225234/p/11012629.html

时间: 2024-08-30 10:27:58

输入两个链表,找出它们的第一个公共结点的相关文章

两个链表的第一个公共结点-输入两个链表,找出它们的第一个公共结点。

1.蛮力法: 1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { 12 if(pHead1==NULL||pHead2

两个链表找出第一个交点

题目:两个单向链表,找出它们的第一个公共结点. 链表的结点定义为: struct ListNode { int       m_nKey; ListNode*   m_pNext; }; 分析:这是一道微软的面试题.微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高. 如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pNext都指向同一个结点.但由于是单向链表的结点,每个结点只有一个m_pNext,因此从第一个公共结点开始,之后它们所有结点都是重合的

编程算法 - 两个链表的第一个公共结点 代码(C)

两个链表的第一个公共结点 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入两个链表, 找出它们的第一个公共结点. 计算链表的长度, 然后移动较长链表的指针, 使其到相同结点的距离的相同, 再同时移动两个链表的指针, 找到相同元素. 时间复杂度: O(n) 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #i

剑指offer七:两个链表的第一个公共结点

输入两个链表,找出它们的第一个公共结点. import java.util.*; public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode current1 = pHead1; ListNode current2 = pHead2; HashMap<ListNode,Integer> hashMap = new HashMap<ListN

两个链表的第一个公共结点

题目描述 输入两个链表,找出它们的第一个公共结点. 首先遍历俩个链表得到它们的长度,以及长的链表多几个结点.在第二次遍历的时候,在较长的链表先走长度之差步,接着再同时在俩个链表遍历,找到的第一个相同的结点就是她们的第一个公共结点 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: int length(

两个链表的第一个公共结点(剑指offer)+链表

两个链表的第一个公共结点 参与人数:1171时间限制:1秒空间限制:32768K 通过比例:31.25% 最佳记录:0 ms|0K(来自  running) 题目描述 输入两个链表,找出它们的第一个公共结点. 链接:http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

【链表】两个链表的第一个公共结点

输入两个链表,找出它们的第一个公共结点. 1 public class Solution { 2 3 /** 4 * 思路:两个链表相交,存在公共的链表尾,根据链表长度的差值,移动指针,找到第一个相同的节点,即为第一个公共节点 5 * @param pHead1 6 * @param pHead2 7 * @return 8 */ 9 public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { 10 11 if

两个链表的第一个公共结点-剑指Offer

两个链表的第一个公共结点 题目描述 输入两个链表,找出它们的第一个公共结点. 思路 若用暴力比较,一个个的节点比较,时间复杂度为O(n2),不可取 根据题意,两个链表若有公共节点,最终要连起来,像一个Y形,所以我们从后往前遍历,但是单向链表只能从前往后,所以这符合“先进后出”,可以用两个辅助栈 也可以不用辅助栈,我们先将两个链表遍历一遍,获取长度大小,然后从长的先开始遍历,到达相等长度后同时开始遍历,直到遍历到相等的节点 这个问题可以类比到求二叉树中两个叶结点的最低公共祖先的问题 代码 /* p

剑指offer (37) 两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点 如果两个链表有公共结点,那么公共结点一定出现在两个链表的尾部 如果两链表长度不相等,那么达到公共结点的步数就不一致,如何确保 两个链表从头开始遍历,同步达到公共结点? 这是关键所在 如果两链表长度相同,那么就可以同步达到了? 由此,我们就需要 让两个链表长度"相等" 我们假设 两链表长度分别为m和n,且m > n, 那么我们可以在较长链表中 先走 m - n 步,然后 两个链表游标同步走,如果有公共结点,那么就一定同时达到 ListN