题目
输入两个链表,找出它们的第一个公共节点。
分析
方法一
蛮力法:在第一个链表上顺序遍历每个节点,每遍历到一个节点的时候,在第二个链表上顺序遍历每个节点。如果在第二个链表上有一个节点和第一个链表上的节点一样,说明两个链表在这个节点上重合。
时间复杂度是$O(mn)$,m和n分别为两个链表的长度。
方法二
两个单链表有公共节点时,呈 Y 字型。
借助两个辅助栈,从链表的尾部开始比较,最后一个相同的节点就是要找的节点。
时间复杂度是$O(m + n)$,空间复杂度是$O(m + n)$。
方法三
不借助辅助栈,时间复杂度也是$O(m + n)$。
首先遍历两个链表得到各自的长度m和n,然后长一点的链表先遍历(m-n)步,然后两个链表同时继续遍历并比较节点是否相等。
实现
|
|