如何添加和遍历LinkedList(Java)

时间:2018-05-26 23:51:52

标签: java data-structures linked-list

我似乎无法打印并添加到LinkedList,就像现在一样。

当我添加一个或两个节点时,它工作正常。不仅仅是它没有按预期工作。

例如:使用添加第一个

添加4和3

3→4->

但是当我再添加一个时,这就是我得到的:

2→3→3→

任何人都可以告诉我这种情况。我对编程很新。

public class LinkedListPractice{

public static void main(String[]args){
//add items to the LinkedList
GenericLinkedList<Integer> gLink = new GenericLinkedList<>();

gLink.addFirst(4);
gLink.addFirst(3);
gLink.addFirst(2);
gLink.addFirst(1);

gLink.printList();

 }//main method

} //LinkedListPractice

class GenericLinkedList<E>{
int size; //represents number of nodes in the LinkedList
Node<E> head;

public GenericLinkedList(){
  size = 0;
  head = null;
} //GenericLinkedList no parameter constructor

//printList
public void printList(){
 Node<E> current = head;  

  for(int i = 0; i < size; i++){
  System.out.print(current.getData() + "->");
  current = head.next;
} //for
} //printList

  public void addFirst(E element){
    Node<E> newNode = new Node<E>(element);
    if(head == null){head = newNode;}  
    else{
      newNode.next = head;
      head = newNode;
   }
    size++;
  } //addFirst

  public boolean isEmpty(){
      if(head == null){
          return true;
      }else
          return false;
   } //isEmpty

  //inner node class
  private static class Node<E>{
    //private data fields
    private E data;
    private Node<E> next; //represents the next link in the LinkedList

    public Node(E element){
        data = element;
        next = null;
    } //Node class constructor

    public E getData(){
      return data;
    } //getData

  } //Node class
} //GenericLinkedList

1 个答案:

答案 0 :(得分:0)

printList()中存在问题。 Head似乎永远不会更新,因此您总是在头部后打印节点,在这种情况下将是3。

更好的解决方案是在循环的每次迭代后更新当前的电流。