160. 相交链表
温馨提示:
本文最后更新于 2022年12月07日,已超过 883 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
160. 相交链表
hash表解法:
时间复杂度:O(2n)
空间复杂度:O(2n)
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// - 使用Hash集合存储链表中的节点
Set<ListNode> set = new HashSet<ListNode>();
// - 查找相交链表不能改变原链表,因此初始化两个临时引用
ListNode temp = headA;
ListNode cur = headB;
// - 循环遍历链表A 先将存储在Hash表中
while (null != temp) {
set.add(temp);
temp = temp.next;
}
// - 如果链表B 中的节点有存在Hash集合中,则链表相交 返回相交的节点
while (null != cur) {
if (set.contains(cur)) {
return cur;
}
cur = cur.next;
}
// - 否则返回null
return null;
}
}
双指针解法:
时间复杂度:O(n)
空间复杂度:O(2n)
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// - 首先进行边界判断
if(null == headA || null == headB){
return null;
}
// - 初始化两个指针 分别指向 链表A 和 链表B
ListNode pointA = headA;
ListNode pointB = headB;
// - 思路:循环遍历:链表A + 链表B 和 链表B + 链表A 是否存在相交的节点
// - 相交的时候跳出
while (pointA != pointB){
if(null == pointA){
// - 如果链表A 结束 让指针指向链表B
pointA = headB;
} else {
// - 指针向后移动
pointA = pointA.next;
}
if(null == pointB){
// - 如果链表B 结束 让指针指向链表A
pointB = headA;
} else {
// - 指针向后移动
pointB = pointB.next;
}
}
// - 此处返回链表A 还是链表B 都可以
return pointA;
}
}
正文到此结束
- 本文标签: Leet-Code 链表 双指针
- 本文链接: http://www.ityoulove.com/article/19
- 版权声明: 本文由崔健宇原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权