剑指offer 36.时间空间效率的平衡 两个链表的第一个公共结点

题目描述

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

解题思路

如果存在共同节点的话,那么从该节点,两个链表之后的元素都是相同的。
也就是说两个链表从尾部往前到某个点,节点都是一样的。
我们可以用两个栈分别来装这两条链表。一个一个比较出来的值。
找到第一个相同的节点。

代码如下

public class FindFirstCommonNode {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if (pHead1==null&&pHead2==null) {
            return null;
        }
        Stack<ListNode> stack1=new Stack<ListNode>();
        Stack<ListNode> stack2=new Stack<ListNode>();
        ListNode resultNode=null;
        while (pHead1!=null) {
            stack1.push(pHead1);
            pHead1=pHead1.next;
        }
        while (pHead2!=null) {
            stack2.push(pHead2);
            pHead2=pHead2.next;        
        }
        while (!stack1.isEmpty()&&!stack2.isEmpty()&&stack1.peek()==stack2.peek()) {
            stack2.pop();
            resultNode=stack1.pop();
        }
        return resultNode;
    }
    
    
    class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }    
}

 

posted @ 2019-08-02 10:23  Transkai  阅读(157)  评论(0编辑  收藏  举报