LeetCode - LeetCode 提交时通过的解决方案,但 returns null in IDE
LeetCode - A solution passed on LeetCode submission, but returns null in IDE
一个link问题:https://leetcode.com/problems/intersection-of-two-linked-lists/
这道题是求两个独立链表的交集,我有一个解决方案,将一个链表中的所有节点放入一个ArrayList中,只检查另一个链表中的节点是否包含在ArrayList 与否。该解决方案通过了 LeetCode 提交,但不知何故在我的 IDE 中只是 returns null。我已经尝试了我的测试用例的变体,但都 returns 为空。这是问题的简短解决方案和我的测试用例之一。
class ListNode {
int val;
ListNode next;
ListNode(int x){
this.val = x;
this.next = null;
}
}
class Solution {
public ListNode getIntersectionNodeUsingArrayList(ListNode headA, ListNode headB) {
List<ListNode> list = new ArrayList<ListNode>();
while(headA != null) {
list.add(headA);
headA = headA.next;
}
while(headB != null) {
if(list.contains(headB)) {
return headB;
}
headB = headB.next;
}
return null;
}
public class TwoLL {
public static void main(String[] args) {
Solution sol = new Solution();
ListNode listA0 = new ListNode(4);
listA0.next = new ListNode(1);
listA0.next.next = new ListNode(8);
listA0.next.next.next = new ListNode(4);
listA0.next.next.next.next = new ListNode(5);
ListNode listB0 = new ListNode(5);
listB0.next = new ListNode(0);
listB0.next.next = new ListNode(1);
listB0.next.next.next = new ListNode(8);
listB0.next.next.next.next = new ListNode(4);
listB0.next.next.next.next.next = new ListNode(5);
ListNode result = sol.getIntersectionNodeUsingArrayList(listA0, listB0);
System.out.println(result.val); // should be 8 but it returns NPE since result is null.
System.out.println(result); // returns null as well, instead of the memory address of the node
如有任何帮助,我们将不胜感激!
您构建列表的方式在它们之间没有交集。属于两个列表的节点是分开的,没有交集。
listA0 4 -> 1 -> 8 -> 4 -> 5
listB0 5 -> 0 -> 1 -> 8 -> 4 -> 5
在上面,节点 8、4、5 是 不同的 ListNode
个实例。因此,它们不能相等。
尝试将一个公共节点添加到您的列表
ListNode common = new ListNode(10);
listA0.next.next.next.next.next = common;
listB0.next.next.next.next.next.next = common;
这会将结果打印为 10
。
为了模拟您提到的情况,下面的方法应该可行
ListNode common = new ListNode(8);
common.next = new ListNode(4);
common.next.next = new ListNode(5);
ListNode listA0 = new ListNode(4);
listA0.next = new ListNode(1);
listA0.next.next = common;
ListNode listB0 = new ListNode(5);
listB0.next = new ListNode(0);
listB0.next.next = new ListNode(1);
listB0.next.next.next = common;
一个link问题:https://leetcode.com/problems/intersection-of-two-linked-lists/
这道题是求两个独立链表的交集,我有一个解决方案,将一个链表中的所有节点放入一个ArrayList中,只检查另一个链表中的节点是否包含在ArrayList 与否。该解决方案通过了 LeetCode 提交,但不知何故在我的 IDE 中只是 returns null。我已经尝试了我的测试用例的变体,但都 returns 为空。这是问题的简短解决方案和我的测试用例之一。
class ListNode {
int val;
ListNode next;
ListNode(int x){
this.val = x;
this.next = null;
}
}
class Solution {
public ListNode getIntersectionNodeUsingArrayList(ListNode headA, ListNode headB) {
List<ListNode> list = new ArrayList<ListNode>();
while(headA != null) {
list.add(headA);
headA = headA.next;
}
while(headB != null) {
if(list.contains(headB)) {
return headB;
}
headB = headB.next;
}
return null;
}
public class TwoLL {
public static void main(String[] args) {
Solution sol = new Solution();
ListNode listA0 = new ListNode(4);
listA0.next = new ListNode(1);
listA0.next.next = new ListNode(8);
listA0.next.next.next = new ListNode(4);
listA0.next.next.next.next = new ListNode(5);
ListNode listB0 = new ListNode(5);
listB0.next = new ListNode(0);
listB0.next.next = new ListNode(1);
listB0.next.next.next = new ListNode(8);
listB0.next.next.next.next = new ListNode(4);
listB0.next.next.next.next.next = new ListNode(5);
ListNode result = sol.getIntersectionNodeUsingArrayList(listA0, listB0);
System.out.println(result.val); // should be 8 but it returns NPE since result is null.
System.out.println(result); // returns null as well, instead of the memory address of the node
如有任何帮助,我们将不胜感激!
您构建列表的方式在它们之间没有交集。属于两个列表的节点是分开的,没有交集。
listA0 4 -> 1 -> 8 -> 4 -> 5
listB0 5 -> 0 -> 1 -> 8 -> 4 -> 5
在上面,节点 8、4、5 是 不同的 ListNode
个实例。因此,它们不能相等。
尝试将一个公共节点添加到您的列表
ListNode common = new ListNode(10);
listA0.next.next.next.next.next = common;
listB0.next.next.next.next.next.next = common;
这会将结果打印为 10
。
为了模拟您提到的情况,下面的方法应该可行
ListNode common = new ListNode(8);
common.next = new ListNode(4);
common.next.next = new ListNode(5);
ListNode listA0 = new ListNode(4);
listA0.next = new ListNode(1);
listA0.next.next = common;
ListNode listB0 = new ListNode(5);
listB0.next = new ListNode(0);
listB0.next.next = new ListNode(1);
listB0.next.next.next = common;