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

Posted Transkai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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;
        }
    }    
}

 

以上是关于剑指offer 36.时间空间效率的平衡两个链表的第一个公共结点的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer36-40

剑指offer(36-40)编程题

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

剑指offer36 两个链表的第一个公共子节点

剑指offer系列——36.两个链表的第一个公共结点

《剑指offer》--- 两个链表的第一个公共结点