Как создать несколько методов (например, insertAtIndex ()) для настраиваемого связанного списка? - PullRequest
0 голосов
/ 01 декабря 2018

Я новичок в концепции связанного списка, и у меня много проблем с созданием этого пользовательского связанного списка в первый раз.

У меня есть два класса: CellPhone и CellList.

В CellPhone у меня есть 4 атрибута: serialNum (long), brand (String), year (int) и price (double).

В CellList у меня есть:

  • внутренний класс с именем CellNode, который имеет два атрибута: phone (CellPhone) и next (CellNode)
  • и два атрибута head (CellNode) и размер (int)

Это из моего класса CellList:

private CellNode head; // point first node in this list object
private int size; // current size of the list(how many nodes in the list)

public CellList() {
    head = null;
    size = 0;
}
public CellList(CellList c) { // is this a correct deep copying?
    head = new CellNode(c.head);
    size = c.getSize();
}

public int getSize() {
    return size;
}

public void addToStart(CellPhone c) {
    head = new CellNode(c, null); //head.getPhone() = c, head.getNextNode() = null.
    size++;
}

Я даже не уверен, что этот метод addToStartправильно сделано, и теперь мне нужно добавить методы, такие как insertAt(/deleteFrom)Index(CellPhone c, int index).Я сделал до здесь:

public void insertAtIndex(CellPhone c, int index) { //index is invalid when it's not 0<index<size-1
    if(index<0 || index>size-1) {
        throw new NoSuchElementException("index is invalid! System terminated.");
    }

, но я не могу полностью понять, как работает эта вещь Node, поэтому я застрял.


Вот полный код:

import java.util.NoSuchElementException;

public class CellList {

    class CellNode {
        private CellPhone phone;
        private CellNode next;
        public CellNode() {
            phone = null;
            next = null;
        }
        public CellNode(CellPhone c, CellNode n) {
            phone = c;
            next = n;
        }
        public CellNode(CellNode c) {
            this(c.getPhone(), c.getNextNode());
        }

        public CellNode clone() {
            CellNode c = new CellNode(phone, next);
            return c;
        }

        public CellPhone getPhone() {
            return phone;
        }
        public CellNode getNextNode() {
            return next;
        }

        public void setPhone(CellPhone c) {
            phone = c;
        }
        public void setNextNode(CellNode n) {
            next = n;
        }
    }

    private CellNode head; // point first node in this list object
    private int size; // current size of the list(how many nodes in list)

    public CellList() {
        head = null;
        size = 0;
    }
    public CellList(CellList c) {
        head = new CellNode(c.head);
        size = c.getSize();
    }

    public int getSize() {
        return size;
    }

    public void addToStart(CellPhone c) {
        head = new CellNode(c, null); //head.getPhone() = c, head.getNextNode() = null.
        size++;
    }

    public void insertAtIndex(CellPhone c, int index) { //index is invalid when it's not 0<index<size-1
        if(index<0 || index>size-1) {
            throw new NoSuchElementException("index is invalid! System terminated.");
        }

    }

    public void showContents() {
        while(head.getNextNode() != null) {
            System.out.println(head.getPhone()+"---->");
            head = head.getNextNode();
        }
    }

}

1 Ответ

0 голосов
/ 01 декабря 2018

Если вы хотите вставить узел с индексом x, который вам необходим, перейдите к узлу с индексом x-1, сохраните следующее значение узла x-1 во временной переменной, поместите узел, в который вы хотите вставитьследующее свойство узла x-1 и поместите значение в переменную temp в следующее свойство узла, который вы хотите вставить.

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