java中的链表教程

java中的链表教程,java,linked-list,Java,Linked List,我正在用Java学习链表,并编写了一些示例代码供练习。基本上它是一个单一的链表。代码工作正常,但会反转输出。这就是它打印出来的科里,乔和汤姆,我希望输出是汤姆,乔和科里。汤姆是第一个节点。我该怎么做?或者说,这是一个单一的链表的工作方式。也就是说,它总是反转输出 public class LinkedList { public String name; public LinkedList next; public LinkedList(String name) { this.name = n

我正在用Java学习链表,并编写了一些示例代码供练习。基本上它是一个单一的链表。代码工作正常,但会反转输出。这就是它打印出来的科里,乔和汤姆,我希望输出是汤姆,乔和科里。汤姆是第一个节点。我该怎么做?或者说,这是一个单一的链表的工作方式。也就是说,它总是反转输出

public class LinkedList {
public String name;
public LinkedList next;
public LinkedList(String name)
{
  this.name = name;
  this.next = null;
}
public String toString()
{
  return name;
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
      Linked l = new Linked();
      l.insert("tom");
      l.insert("joe");
      l.insert("cory");
      l.print();

    }
 }
class Linked
{
LinkedList first;

public Linked()//initialize 
{
    this.first = null;
}

public void insert(String name)
{    
    LinkedList g = new LinkedList(name);
    g.next = first;
    first = g;  
}
 //checks if the list is empty
public boolean isEmpty()
{
    return (first ==null);
}
public void print() //displays the list
 {
    LinkedList t = first;
    while(t!=null)
    {
        System.out.println(t);
        t = t.next;
    }
  }
}

您正在LinkedList的开头插入。如果要添加,请在最后一个节点后插入新节点。你需要一个尾部参考

public String name;
    public LinkedList next;
    public LinkedList(String name)
    {
      this.name = name;
      this.next = null;
    }
    public String toString()
    {
      return name;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
          Linked l = new Linked();
          l.insert("tom");
          l.insert("joe");
          l.insert("cory");
          l.print();

        }
     }
    class Linked
    {
    LinkedList first;
    LinkedList tail;

    public Linked()//initialize 
    {
        this.first = null;
        this.tail = first;
    }

    public void insert(String name)
    {    
        LinkedList g = new Test(name);
        if(isEmpty())
        {
            first = g;
            tail = first;
        }
        else
        {
            tail.next = g;
            tail = g;
        } 
    }
     //checks if the list is empty
    public boolean isEmpty()
    {
        return (first ==null);
    }
    public void print() //displays the list
     {
        LinkedList t = first;
        while(t!=null)
        {
            System.out.println(t);
            t = t.next;
        }
}

如果您注意到我添加了一个尾部引用,并且没有在开始处插入新对象,而是将其附加到LinkedList的末尾。您可以更改要添加的方法名称。事实上,你可以有两个方法保持原样……然后添加我的新方法insert,但调用它add,这样你就可以在LinkedList的开头插入或添加到末尾。

正如@brso05所指出的,你是在头上插入值,而不是在尾上插入值

就是

tom

joe->tom

cory->joe->tom

相反,你应该像这样把它插到尾巴上

public void insert(String name)
{ 
  if(first==null) 
  {
        LinkedList g = new LinkedList(name);
        g.next = null;
        first = g;  
  } else {

        LinkedList g = new LinkedList(name);

        if (first.next==null) {
          g.next = null;
          first = g;  
          return;
        }

        LinkedList l=first.next;
        for(;l!=null;l=l.next){
         if(l.next==null) {
           l.next = g;
           g.next = null;  
           break;
         }
        }


  }

}

这不是一个很好的解决方案,它应该是即兴的

是链接你自己的类…?@黑豹是的,从零开始开发它想要理解概念和它是如何工作的,在使用图书馆之前,一旦代码工作,考虑把它带来,在那里我们可以帮助使你的代码是最好的它可以!所以,如果我使用一个尾部引用,这是否意味着它不再是一个单一链接的列表呢?我想了很多,但在我写出来之前,我的算法是不同的。谢谢你的帮助。但这是一个单一的链表。有了第一个和第二个参考仍然使它成为一个单一的链接列表欢迎你很高兴我能帮助你!你能把这个标记为正确的吗?谢谢是的,它仍然是一个单一的LinkedList。谢谢。所以这里唯一的区别是订单。它只打印汤姆和科里。我想你需要另一个尾巴参考。我试过运行你的代码。它跳过了乔。