找到两个链表的交集,但我的代码返回null?



我正在解决一个问题,找到两个链表的交集,我的解决方案通过了LeetCode上的所有测试用例。然而,当我在自己的IDE (IntelliJ)上使用相同的测试用例进行测试时,我被告知"无法读取字段'val',因为'test'为空"。如果有人能指出我在这里错过了什么,我将不胜感激!

class ListNode {
int val;
ListNode next;
ListNode () {}
ListNode (int val) {
this.val = val;
}
ListNode (int val, ListNode next) {
this.val = val;
this.next = next;
}
}
public class Q160 {
public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int sizeA = getSize(headA);
int sizeB= getSize(headB);
for (int i = 0; i < Math.abs(sizeA - sizeB); i++) {
if (sizeA > sizeB) {
headA = headA.next;
}
else {
headB = headB.next;
}
}
while (headA != null && headB != null) {
if (headA == headB) {
return headA;
}
headA = headA.next;
headB = headB.next;
}
return null;
}
private static int getSize(ListNode head) {
int count = 0;
while (head != null) {
count++;
head = head.next;
}
return count;
}
public static void main(String[] args) {
ListNode hA = new ListNode(4, new ListNode(1, new ListNode(8, new ListNode(4, new ListNode(5)))));
ListNode hB = new ListNode(5, new ListNode(6, new ListNode(1, new ListNode(8, new ListNode(4, new ListNode(5))))));
ListNode test = getIntersectionNode(hA, hB);
System.out.println(test.val);
}
}
if (headA == headB) {
return headA;
}

对于您的测试用例,这将始终返回false。这样做的原因是Java使用==操作符进行引用比较。hAhB包含完全不同的对象

可能您想要做的是使用val成员来检查相等性,这将导致如下所示:

if (headA.val == headB.val) {
return headA;
}

这将工作,因为val是一个原语int,它将按预期进行比较。

最新更新