LeetCode 热题 HOT 100----160. 相交链表

相交链表
在这里插入图片描述
题解链接

 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;
     }
 }

总体思想:就是A走一遍链表A,再走一遍链表B
B走一遍链表B,再走一遍链表A
如果有相交部分,那么最后pA=pB
如果没有相交部分,呢么最后pA=pB=null
但是我有一个小问题:如果两个长度相等的链表,都在同样的位置数值相等,但是之后不相等,那么是否这个题目也会通过?
例如:1234和6739
不会通过

自己写的代码
思路:先计算两个链表长度,再从相等长度处开始逐一比对

/**
 * 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) {
        int lA = getLength(headA);
        int lB = getLength(headB);
        ListNode p = headA;
        ListNode q = headB;
        int delta = lA - lB;
        if(lA > lB){
            while(delta > 0){
                p = p.next;
                delta--;
            }
        }
        else{
            while(delta < 0){
                q = q.next;
                delta ++;
            }
        }
        while(p != q){
            p = p.next;
            q = q.next;
        }

        return p;


    }

    public int getLength(ListNode head){
        if(head == null) return 0;
        int l = 1;
        ListNode p = new ListNode();
        p = head;
        while(p.next != null){
            p = p.next;
            l++;
        }
        return l;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值