面试题-算法:两个链表的公共节点
题目背景
两个链表,或许存在功能节点
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;
}
}
浙公网安备 33010602011771号