Невозможно правильно вставить элементы с помощью FIFO LinkedList Java - PullRequest
0 голосов
/ 05 мая 2018

Может ли кто-нибудь сказать мне, что не так с методом приведенного ниже кода insertq: Работает нормально, когда у меня только 2 входа 10 и 20. С помощью метода вставки я могу правильно вставить данные, однако это LIFO. Я пытаюсь сделать FIFO здесь. Я хочу вставить несколько элементов в список и хочу отобразить в формате FIFO.

/**
 * LinkedList
 * @author ashish
 *
 */

class Node {
    int data;
     Node next;
     Node(int data) {
         this.data = data;
     }
}

public class LinkedList {
    static Node root;
    Node temp = null;

    public void insert(int data) {
        if (root == null) {
            root = new Node(data);
        }
        else {
            temp = root;
            root = new Node(data);
            root.next = temp;
        }
    } // end of insert

    public void insertq(int data) {
        if (root == null) {
            root = new Node(data);
        }
        else {
            temp = root;
    //      temp.next = new Node(data);
    //      root = temp;
            root = new Node(data);
            temp.next = root;
            root = temp;
        }
    } // end of insert

    public void display(Node node) {
        while (node != null) {
            System.out.println(node.data);
            node = node.next;
        }
    }

    /**
      * @param args
      */
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
    //    list.insert(10);
    //    list.insert(20);
    //    list.insert(30);
    //    list.insertq(10);
//Insert Data
        list.insertq(20);
        list.insertq(30);
        list.insertq(40);
    //    list.insert(10);
    //    list.insert(20);
    //  list.insert(30);
        list.display(root);
    }
}

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

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

Для реализации пункта 1,

public void insertq(int data) {
    if(root == null) {
      root = new Node(data);
    } else {
      temp = root;
      while (temp.next != null) {
          temp = temp.next;
      }
      Node newNode = new Node(data);
      temp.next = newNode;
    }
  }
0 голосов
/ 05 мая 2018

Ниже код работал для меня:

/**
 * LinkedList
 * @author ashish
 *
 */

class Node
{
  int data;
  Node next;
  Node(int data)
  {
    this.data=data;
  }
}
public class LinkedList {

  static Node root;
  Node temp=null;
  public void insert(int data)
  {
    if(root==null)
    {
      root=new Node(data);
    }
    else
    {
      temp=root;
      root=new Node(data);
      root.next=temp;
    }
  }//end of insert


  public void insertq(int data)
  {
    if(root==null)
    {
      root=new Node(data);
    }
    else
    {
      temp=root;
      while(temp.next!=null)
      {
        temp=temp.next;
      }
      Node newNode=new Node(data);
      temp.next=newNode;
    }
  }//end of insert

  public void display(Node node)
  {
    while(node!=null)
    {
      System.out.println(node.data);
      node=node.next;
    }
  }
  /**
   * @param args
   */
  public static void main(String[] args) {

    LinkedList list=new LinkedList();
  //  list.insert(10);
   // list.insert(20);
    //list.insert(30);
    list.insertq(10);
    list.insertq(20);
    list.insertq(30);
    list.insertq(40);
//    list.insert(10);
//    list.insert(20);
//  list.insert(30);
    list.display(root);
  }

}
0 голосов
/ 05 мая 2018

Проблема с вашим insertq() методом заключается в том, что он использует стратегию вставки LIFO. У вас уже есть метод, который будет вставлять с использованием стратегии FIFO, и это просто простой метод insert(). Итак, используйте insert(), если вы хотите перебрать свой список в порядке FIFO.

Я протестировал insert со следующим кодом и убедился, что на самом деле он отображается с использованием порядка LIFO, начиная с корня:

LinkedList list = new LinkedList();
list.insert(10);
list.insert(20);
list.insert(30);
list.insert(40);
list.insert(50);
list.display(list.root);

50
40
30
20
10

Демо

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