首页 > 解决方案 > 使用带有布尔方法的链表

问题描述

我需要使用包含多个布尔方法的链接列表创建一个电话簿。其中一个是插入,它应该在电话簿中输入一个新的人,如果这个人已经存在,方法电话簿不应该改变。我在实现这个时遇到了麻烦方法,特别是在我应该将用户输入的名称与电话簿中已经存在的名称进行比较的部分。这是我的代码

class PhoneBookList implements PhoneBook {
    private int size = 0;
    Node head;

    private static final class Node {
        final Person person;
        Node next;

        Node(Person person) {
            this.person = person;
        }
    }

    public boolean insert(Person person) {
        Node n = new Node(person); 
        Node p = head,prev = null;


        if(p == null) {
            head = n;
            size++;
            return true;
        }

        int comparison = p.name.compareTo(n.name);

        if(comparison < 0) {
            n.next = p;
            p = n;
            size++;// 
            return true;
        }

        if(comparison == 0) {
            return false;

        }

        Node current = p;
        while(current.next !=null && current.next.person < person) {
            current = current.next;
        }
        if(current.next !=null && current.next.person == person) {
            return false;

        }

        n.next = current.next;
    current.next = n;
        size++;
    return true;
    }
}

我们必须明确使用这个 compareTo 方法,我无法让它工作。任何指导。以下是错误:

PhoneBookList.java:25: error: cannot find symbol
                int comparison = p.name.compareTo(n.name);
                                                   ^
  symbol:   variable name
  location: variable n of type Node
PhoneBookList.java:25: error: cannot find symbol
                int comparison = p.name.compareTo(n.name);
                                  ^
  symbol:   variable name
  location: variable p of type Node
PhoneBookList.java:40: error: bad operand types for binary operator '<'
                while(current.next !=null && current.next.person < person) {
                                                                 ^
  first type:  Person
  second type: Person
                                                                 ^
  first type:  Person
  second type: Person

谢谢!

标签: java

解决方案


要检查列表中是否已经存在人员,您需要遍历列表中的所有节点,并将节点中的每个人名与您要插入的人名进行比较。

class PhoneBookList implements PhoneBook {
    private int size = 0;
    Node head = null;

    private static final class Node {
        final Person person;
        Node next;

        Node(Person person) {
            this.person = person;
        }
    }

    public boolean insert(Person person) {
        Node n = new Node(person); 
        Node p = head;

        if(p == null) {
            head = n;
            size++;
            return true;
        } else {

            Node temp = p;
            int comparison;
            while(temp.next != null) {
                comparison = temp.person.name.compareTo(person.name);
                if(comparison == 0){
                    return false;
                }
                temp = temp.next;
            }
            temp.next = n;
            size++;
            return true;
        }

    }
}

推荐阅读