Как добавить в начало очереди в java - PullRequest
0 голосов
/ 08 апреля 2020

Я делаю простую реализацию очереди с узлами, у которых есть методы экземпляра setNext, getNext. Класс, который я пишу, имеет поля Node First и Node Last. Мой метод постановки в очередь должен иметь 3 случая

(1) Добавить в конец списка (обычная реализация очереди)

this.back.setNext(node to add);
this.back = (node to add);

(2) Добавить в пустой список

this.front = this.back = (node to add);

(3) Добавить в начало списка (и, таким образом, переместить все остальные элементы назад)

Мне кажется, это очень просто, но мне трудно разобраться, как получить все следующие значения для соответствия и не перезаписывать какие-либо узлы. Пожалуйста, дайте мне знать алгоритм, который может сделать это. Спасибо!

Обновление: одна из реализаций, которую я попробовал, использует массив:

Node[] x = new Node[this.totalNodes+1];
    Node current = this.front;
    int i = 0;
    while(current != null) {
      x[i] = current;
      current = current.getNext();
      i++;
    }
    int j = 0;
    Node current2 = this.front;
    this.front = (node to add)
    while(j < x.length-1) {

      current2.setNext(x[j+1]);
      current2 = current2.getNext();
      j++;
    }

1 Ответ

0 голосов
/ 09 апреля 2020

Может быть, это то, что вы хотели

public class MyDS {
Node head=null;
Node next=null;
class Node
{
    String data;
    Node link=null;
    Node(String s)
    {
        data=s;
    }
}
public void add(Node n)
{
    if(head == null)
    {
        head = n;
        n.link = null;
    }
    else
    {
        if(next == null)
        {
            next = n;
            head.link = next;
        }
        else
        {
            next.link = n;
            next = n;

        }
    }

}
public void addTop(Node n)
{
    if(head == null)
    {
        head = n;
        n.link = null;
    }
    else
    {
        Node oldHead = head;
        head = n;
        n.link = oldHead;

    }
}

public String print()
{
    String str="";
    Node startN=head;
    while(startN.link != null)
    {
        str+=startN.data+"_";
        startN = startN.link;
    }
    if(startN.data !=null) str+=startN.data+"_End!";
    return str;
}

public static void main(String args[])
{
    MyDS myDS = new MyDS();
    myDS.add(myDS.new Node("a"));
    myDS.add(myDS.new Node("b"));
    myDS.add(myDS.new Node("c"));
    myDS.addTop(myDS.new Node("d"));
    myDS.add(myDS.new Node("e"));
    myDS.addTop(myDS.new Node("f"));
    System.out.println(myDS.print());
}
}


Вывод

f_d_a_b_c_e_End!

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