【力扣刷题总结之160. 相交链表】

相关标签


一、题目要求

 

二、题解和代码实现

1.题解

官方题解

2.代码实现

代码如下(示例):

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
//hash表解法
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        HashSet<ListNode> set = new HashSet<>();
        
        while (headA!=null){//遍历 
            set.add(headA);//存进hash表中
            headA = headA.next;
        }
        
        while (headB!=null){//遍历
            if (set.contains(headB)){//当找到第一个在hsah表的元素,就是第一个相交的节点
                return headB;
            }
            headB = headB.next;
        }
        return null;
    }
}


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
//双指针解法
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

      if(headA ==null ||headB ==null) { //判断头节点是否有为空
          return null;
      }
       ListNode pA= headA; //赋值给pA
       ListNode pB = headB; //赋值给pB

       while(pA != pB){ //判断头节点是否相同
        //判断pA是否为null,当是null时候,证明已经走完headA链表,没有找到与pB相同的节点,把headB赋值给pA
            pA = pA==null? headB : pA.next;
         //判断pB是否为null,当是null时候,证明已经走完headB链表,没有找到与pA相同的节点,把headA赋值给pB
            pB = pB==null? headA : pB.next;
         //最重要的一点:当链表长度不同时 会第二轮循环比较, 第二轮 体现在如果pA或pB相交就返回交点, 不相交最后就是null==null
         //[原因是,如果是headA长度比headB长度要长,当转换后后如果相遇则为交点(在第一轮移动中恰好抹除了长度差),
        //两个指针等于移动了相同的距离, 有交点就返回, 当无交点就是pA和pB各走了(headA和headB) 两条指针的长度]
       } 

        return pA; //当走到这一步时候,前面的循环不成立,所以pA == pB,直接返回pA节点
    
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值