Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加到链接列表的尾部_Java_Linked List_Nodes_Singly Linked List - Fatal编程技术网

Java 添加到链接列表的尾部

Java 添加到链接列表的尾部,java,linked-list,nodes,singly-linked-list,Java,Linked List,Nodes,Singly Linked List,我的链表有一个append方法,我想在其中添加到尾部,但是当一个新节点添加到列表中时,headNode和tailNode都成为新插入的节点。如何使headNode保持为输入列表的第一个节点,而不是与tailNode相同 public static void append() { for(int x = 0; x < gradeArray.length; x++) { if(gradeArray[x] < 70) { StudentNode newNode

我的链表有一个append方法,我想在其中添加到尾部,但是当一个新节点添加到列表中时,headNode和tailNode都成为新插入的节点。如何使headNode保持为输入列表的第一个节点,而不是与tailNode相同

 public static void append()
{
 for(int x = 0; x < gradeArray.length; x++)
 {
   if(gradeArray[x] < 70)
   {
     StudentNode newNode = new StudentNode(nameArray[x], gradeArray[x], null);
     if(headNode == null)
     {
       headNode = newNode;
     }
     else
     {
       tailNode.nextNode = newNode;
     }
     tailNode = newNode;
}
 }
 }
publicstaticvoidappend()
{
对于(int x=0;x
为什么要附加此语句<代码>尾节点=新节点

想象一下,线程通过
if(headNode==null)
将newNode地址分配给headNode。之后,
tailNode=newNode,尾部指向新节点。
最后,tailNode和headNode指向同一个对象:newNode


我认为您必须删除此语句
tailNode=newNode

我不确定您犯了什么错误,但请看下面这段代码运行得非常好

    public class Grades {

    public static String[] nameArray = new String[50];
    public static int[] gradeArray = new int[50];

    public static StudentNode headNode;
    public static StudentNode tailNode;

    public static void append() {
        for (int x = 0; x < gradeArray.length; x++) {
            if (gradeArray[x] < 70) {

                String name = nameArray[x];
                int grade = gradeArray[x];
                StudentNode newNode = new StudentNode(name, grade, null);
                if (headNode == null) {
                    headNode = newNode;
                } else {
                    tailNode.nextNode = newNode;
                }
                tailNode = newNode;
            }
        }
    }

    public static void main(String[] args) throws java.lang.Exception {
        for (int i = 0; i < 50; i++) {
            nameArray[i] = "name-" + i;
            gradeArray[i] = i;
        }

        append();

        for(int i=0; i<50; i++) {
            nameArray[i] = "name-" + (i + 50);
            gradeArray[i] = i + 50;
        }

        append();

        System.out.println(headNode.toString());
        System.out.println(tailNode.toString());
    }
 }

 class StudentNode {

    public int grade;
    public String name;
    public StudentNode nextNode;

    public StudentNode(String n, int g, StudentNode sn) {
        name = n;
        grade = g;
        nextNode = sn;
    }

    public String toString() {
        return name + ", " + grade;
    }
}
公共课成绩{
公共静态字符串[]nameArray=新字符串[50];
公共静态int[]gradeArray=新int[50];
公共静态学生节点头节点;
公共静态StudentNode tailNode;
公共静态void append(){
对于(int x=0;x对于(int i=0;i当您调用append()时,是否确定head节点未重置为null?是否可以在append方法中记录head节点和tail节点以查看它们是否为null?headNode在类中声明为:private static StudentNode headNode=null;是否打算在应用程序范围内只能有一个链接列表(由于
静态
)?是的,只有一个链接列表。您是否曾多次在该方法所在的位置创建过此类?headNode变量是否在此类中的任何位置发生过更改?第一个添加的节点是并且应该是head And tail,这是正确的。当我去掉该行时,它仍会执行相同的操作。