面试题-算法:两个链表的公共节点

题目背景

两个链表,或许存在功能节点
1.确定是否相交
2.如果相交获取第一个功能节点

方法1

使用两个Stack,将两个链表各个节点的引用放入各自的Stack。从共同的尾巴往前扒拉到第一个分岔点【像杭州西溪湿地南站】

    public ListNode findFirstCommonNode(ListNode l1, ListNode l2) {
        ListNode node = l1;
        Stack stk1 = new Stack();
        while (node != null) {
            stk1.push(node);
            node = node.next;
        }
        node = l2;
        Stack stk2 = new Stack();
        while (node != null) {
            stk2.push(node);
            node = node.next;
        }
        if (stk1.peek().equals(stk2)) {
            while (!stk1.isEmpty() && !stk2.isEmpty() && stk1.peek().equals(stk2.peek())) {
                node = (ListNode) stk1.pop();
                stk2.pop();
            }
            return node;
        } else {
            return null;
        }
    }
posted @ 2021-12-22 20:50  月落随山隐  阅读(38)  评论(0)    收藏  举报