问题的链接:https://leetcode.com/problems/intersection-of-two-linked-lists/

这个问题与获取两个单独的链表的交集有关,我有一个解决方案,将一个链表中的所有节点放入一个ArrayList中,然后仅检查另一个链表中的节点是否包含在ArrayList中。该解决方案通过LeetCode提交,但是以某种方式在我的IDE中仅返回null。我已经尝试过各种测试用例,但都返回null。这是该问题的简短解决方案,也是我的测试用例之一。

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;

关于java - LeetCode-在LeetCode提交时传递的解决方案,但在IDE中返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59350154/

10-13 07:54