输入两个链表,找出它们的第一个公共结点
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.Stack;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while (p1 != p2) {
p1 = p1 == null ? pHead2 : p1.next;
p2 = p2 == null ? pHead1 : p2.next;
}
return p1;
}
}
//空间换时间
//用两个栈分别放这两个链表的节点,两个同时不断出栈,比较两节点是否相同,直到找到最后一个相同的节点
import java.util.Stack;
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 p1 = pHead1;
ListNode p2 = pHead2;
ListNode p3 = null;
for ( ; p1!=null; stack1.push(p1),p1 = p1.next);
for ( ; p2!=null; stack2.push(p2),p2 = p2.next);
while ( !stack1.isEmpty() && !stack2.isEmpty()) {
ListNode val1 = stack1.pop();
ListNode val2 = stack2.pop();
if (val1.val != val2.val) {
break;
}
p3 = val1;
}
return p3;
}
}