Добавление в конец связанного списка - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть метод добавления для моего связанного списка, в который я хочу добавить хвост, однако, когда новый узел добавляется в список, 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;
}
 }
 }

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Я не уверен, какую ошибку вы совершаете, но смотрите ниже, этот код работает отлично.

    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;
    }
}

Даже если вы измените классы и имена и снова запустите команду добавления, это все равно сохранит правильную голову.

Идеальная ссылка для запуска кода

0 голосов
/ 24 февраля 2019

Почему вы добавили это утверждение?tailNode = newNode;

Представьте себе, что поток проходит через if(headNode == null), он назначает адрес newNode для headNode.После этого tailNode = newNode; выполняется и хвост указывает на newNode.Наконец, tailNode и headNode указывают на один и тот же объект: newNode.

Я думаю, вы должны удалить это утверждение tailNode = newNode;

...