題目描述
輸入兩個鏈表,找出它們的第一個公共結點。
解析思路
如果有公共結點,則應該公共結點後面的點都是一樣的。
所以我們可以倒過來看,遇到的最後一個相同的結點即是正數第一個相同結點。
利用棧先進後出的特點,設兩個棧用來儲存兩個鏈表。再來開始比較。
運行代碼
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;
}
}