搜索两个不同链表之间的差异

Searching difference between two different linked list

我的两个方法“oneTwo”和“twoOne”有问题,打印时“结果”列表没有给出任何输出。

这是我做的案例:

add list1 ana
add list2 ana
add list1 ben
add list2 bob
add list1 james
add list2 james
print_difference list1 list2

出于某种原因,它没有给我任何输出,但“print list1”会。

import java.util.Scanner;

class Node{
    Object data;
    Node next;
    Node prev;

    public Node() { 
    }
    public Node(Object data) {
        this(data,null,null);
    }
    public Node(Object data,Node next,Node prev) {
        this.data=data;
        this.next=next;
        this.prev=prev;
    }
}

class DoublyLinkedList {
    Node head,tail;
    int size;
    public DoublyLinkedList() {
        makeEmpty();
    }
    public boolean isEmpty() {
        return size == 0;
    }
    public void makeEmpty() {
        head=tail=null;
        size=0;
    }
    public int size() {
        return size;
    }
    //adding
    public void addLast(Object x) {
        Node tmp=new Node(x);
        if (head==null && tail==null) {
            head=tail=tmp;
            size++;
        }else {
            tmp.prev=tail;
            tail.next=tmp;
            tmp.next=null;
            tail=tmp;
            size++;
        }
    }
    //print
    public void print() {
        Node p=head;
        while(p!=null) {
            System.out.print(p.data);
            if(p.next!=null) {
                System.out.print("-");
            }
            p=p.next;
        }
        System.out.println();
    }

这部分似乎对我不起作用

    //compare
    void oneTwo(DoublyLinkedList a) {
        DoublyLinkedList result=new DoublyLinkedList();
        Node p=head;
        do {
            boolean check=a.searchByData(p.data);
            if(check==false) {
                result.addLast(p.data);
            }
            p=p.next;
        }while(p.next!=null);
        System.out.print("LIST_difference1 : ");
        result.print();
    }
    void twoOne(DoublyLinkedList a) {
        DoublyLinkedList result=new DoublyLinkedList();
        Node p=head;
        do {
            boolean check=a.searchByData(p.data);
            if(check==false) {
                result.addLast(p.data);
            }
            p=p.next;
        }while(p.next!=null);
        System.out.print("LIST_difference2 : ");
        result.print();
    }

“result.print();”

没有任何输出
    public boolean searchByData(Object x) {
        Node search=head;
        boolean check=false;
        while(search.data != x) {
            if(search.data.equals(x)) {
                check=true;
                break;
            }
            if(search.next!=null) {
                search=search.next;
            }else {
                check=false;
            }
        }
        return check;
    }
}

public class FindTheDifference {
    public static void main(String[] args) {
        DoublyLinkedList one=new DoublyLinkedList();
        DoublyLinkedList two=new DoublyLinkedList();
        while (true){
            Scanner scan=new Scanner(System.in);
            String input=scan.nextLine();
            String[] inputs=input.trim().split(" ");
            if(inputs[0].equalsIgnoreCase("add")) {
                if(inputs[1].equalsIgnoreCase("list1")) {
                    one.addLast(inputs[2]);
                }else {
                    two.addLast(inputs[2]);
                }
            }else if(inputs[0].equalsIgnoreCase("print")) {
                if(inputs[1].equalsIgnoreCase("list1")) {
                    one.print();
                }else {
                    two.print();
                }
            }else if(inputs[0].equalsIgnoreCase("print_difference")) {
                if(inputs[1].equalsIgnoreCase("list1") && inputs[2].equalsIgnoreCase("list2")) {
                    one.oneTwo(two);
                }else if(inputs[1].equalsIgnoreCase("list2") && inputs[2].equalsIgnoreCase("list1")) {
                    two.twoOne(one);
                }
            }
        }
    }
}

我的代码有什么问题?任何帮助将不胜感激。

因为a.searchByData()

出现了死循环

像这样

    public boolean searchByData(Object x) {
        Node search = head;
        boolean check = false;
        while (search.data != x) {
            if (search.data.equals(x)) {
                check = true;
                break;
            }
            if (search.next != null) {
                search = search.next;
            } else {
                //If it doesn't match here and it's at the end of the linked list
                //should break
                check = false;
                break;
            }
        }
        return check;
    }