Проблема в проверке, если 2 связанных списка содержат одинаковые значения в Java - PullRequest
0 голосов
/ 08 января 2019

Меня попросили написать метод, который запускается в связанном списке и проверяет, содержат ли два списка одинаковые значения (необязательно, чтобы значения между ними были одинаковыми).

Вот мой код:

    public boolean Equals(Object obj) {
    if(obj instanceof LinkedList) //Checks if the object it got is a Linked List
    {
        if(this.length() != ((LinkedList)obj).length())
            return false;
        Node head1 = head;
        Node head2 = ((LinkedList) obj).getHead();
        boolean ans = false;
        this.toString();
        ((LinkedList)obj).toString();
        while(head1 != null)// Running on the 1st list values
        {
            while(head2 != null) { // comparing each value in the 2nd list to see if it's on the 1st list as well
                if(head2.getValue() == head1.getValue())
                    ans = true;
                head2 = head2.getNext();
            }
            if(ans == false)
                return false;
            ans = false;
            head1 = head1.getNext();
        }
        return true;
    }
    else
        return false;
}

Я также добавляю класс структуры, чтобы у вас не было никаких трудностей с пониманием:

public class LinkedList {

// Attributes

private Node head, tail;
private int length;

// Constructor

public LinkedList() {

    head = tail = null;
    length = 0;
}

// getHead

public Node getHead() {

    return head;
}

// getTail

public Node getTail() {

    return tail;
}

// Length

public int length() {

    return length;
}

// isEmpty

public boolean isEmpty() {

    return head == null;
}

Он возвращает false во всех случаях, несмотря ни на что, мне не удается ввести мою ошибку, большое спасибо !!

1 Ответ

0 голосов
/ 10 января 2019

Ваше решение не будет работать, если списки имеют тип -

  • список A: 1 -> 1 -> 1
  • список B: 1 -> 2 -> 3

потому что во втором цикле while для ans будет установлено значение true, поскольку оно будет соответствовать 1 - 1.

Чтобы решить вашу проблему - вам нужно отсортировать оба списка, а затем сравнить.

Или вы можете использовать хеширование для сравнения, если оба списка равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...