劍指offer---兩個鏈表的第一個公共結點(Java)

題目描述

輸入兩個鏈表,找出它們的第一個公共結點。

解析思路

如果有公共結點,則應該公共結點後面的點都是一樣的。
所以我們可以倒過來看,遇到的最後一個相同的結點即是正數第一個相同結點。
利用棧先進後出的特點,設兩個棧用來儲存兩個鏈表。再來開始比較。

運行代碼

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

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

public class Solution {
    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 sameNode = 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();
            sameNode = stack1.pop();
        }
        return sameNode;
    }
}

運行截圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章