【无标题】

单链表题目:相交链表,寻找相交的结点并返回
题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
两种思想
1、利用哈希表可以快速查找的特性,将单链表a存在哈希表中,同时遍历单链表b与哈希表中点元素进行比较,判断是否在哈希表中,
若不存在,则继续遍历下一个;若当前阶段存在,且后面节点也存在,则返回该节点。
2、利用双指针,pa一个从a的头节点开始遍历,pb从b的头节点开始遍历,当pa遍历a结束时从b重新开始遍历,当pb遍历结束b后吗,从a重新开始遍历,若pa,pb同时指向一个结点或同时为null,则返回该节点或说明两链表不相交。

Definiton for singly-linked list.//说明接下来的代码将定义一个单链表
piblic class ListNode{//定义公共类ListNOde,表示单链表的结点
    int val;//用于存储节点的值
    ListNode next;
    ListNode(int x){//定义构造函数,用于接受整形参数x
        val=x;
        next=null;//初始化为空
    }
}
public class Solution{
    public ListNode getIntersectNode(ListNode headA,ListNode headB)//这个方法用来接收两个LIstNode类型的参数headA和headB
    set<ListNode> visited =new HashSet<ListNode>;//创建一个set集合visited存放访问过a的结点
    ListNode temp=headA;//这里temp变量用于遍历链表headA
    while (temp !=null){
        visited.add(temp};//将当前访问过的结点都加入visited集合中,表示该节点已访问
        temp=temp.next;
    }
    temp =headB;
    while(temp!=null){
        if(visited.contains(tamp)){
            return temp;//判断集合visited中是否含有当前节点temp。即判断是否是ab相交的节点
        }
        temp=temp.next;
    }
    return null
    }
public class Solution {
    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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值