160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。
快速做法
消除长度差: 拼接两链表。
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) return null;
ListNode pA = headA, pB = headB;
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
直观做法
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
Stack<ListNode> stack1 = new Stack<>();
Stack<ListNode> stack2 = new Stack<>();
ListNode cur = headA;
while (cur!=null){
stack1.push(cur);
cur = cur.next;
}
cur = headB;
while (cur!=null){
stack2.push(cur);
cur = cur.next;
}
ListNode pre = null;
while (!stack1.empty() && !stack2.empty() && stack1.peek()==stack2.peek()){
pre = stack1.pop();
stack2.pop();
}
if (pre!=null)
System.out.println("Reference of the node with value = " + pre.val);
return pre;
}