维持链表插入的顺序

时间:2018-12-06 05:20:12

标签: java list insertion-order

因此,我正在制作一个链表,在插入时,我需要保持其顺序。因此,如果要通过此插入从根目录到其路径遍历链表 ->

Insertion: 1 2 3 

它应该输出->

Output: 1 2 3

到目前为止,我的代码如下。这些代码所做的全部都是反向输出我的插入内容。所以它打印->

3
2
1

我希望程序通过修改addLast()方法来保持其插入顺序。因此,当我打印“链接列表”时,它的插入方式与插入时相同。

public class LinkedListMeth 
{
  public static void main(String[] args) 
  {
     FirstLinkedList list = new FirstLinkedList();
     list.addLast(1);
     list.addLast(2);
     list.addLast(3);
     list.traverseLast();
 }
}

class FirstLinkedList
{
private class Node           
   {
      private Node next;
      private int data;
   }

   private Node last = null; 

  public void addLast(int d)
   {
       Node newNode = new Node();
       newNode.data = d;
       newNode.next = last;
       last = newNode;  
   }

    public void traverseLast()
   {
       Node head = last;
       while (head != null)

       {
           System.out.println(head.data);
           head = head.next;
       }
   }

2 个答案:

答案 0 :(得分:0)

如果您要坚持当前的确切设计,那么按从头到尾的顺序打印列表的一种方法是使用递归,如下所示:

public void printFirstLinkedList(Node node) {
    if (node == null) return;

    printFirstLinkedList(node.next);

    System.out.print(node.data + " ");

    return;
}

printFirstLinkedList(yourList.last);

答案 1 :(得分:0)

您应保留链接列表的根,以便按插入顺序进行遍历。

这是您代码的编辑版本:

class FirstLinkedList {
    private class Node {
        private Node next;
        private int data;
    }

    private Node root = null;
    private Node last = null;

    public void addLast(int d) {
        Node node = new Node();
        node.data = d;
        if (root == null) {
            root = node;
            root.next = last;
            last = root;
        } else {
            last.next = node;
            last = last.next;
        }
    }

    public void traverseLast() {
        Node head = root;
        while (head != null) {
            System.out.println(head.data);
            head = head.next;
        }
    }
}

输出为:

1
2
3