Я написал метод удаления для узла в связанном списке по определенному индексу (Java), но он не вносит изменений в список? - PullRequest
0 голосов
/ 02 октября 2018

Код не вносит изменений в выходные данные и просто перепечатывает исходный связанный список, и я не знаю, связана ли проблема с моим методом удаления или со спецификаторами доступа, которые я использовал для своего стека.

  1. Элемент списка

Открытый статический класс Stack {

     Node first; *// newest node added*
    private int size;
     class Node
    {  
           String item;
           Node next; 

    }
    public Node delete(int index,Stack list)
    {  

        if (list.first== null) {
            return null;
        } else if (index == 0) 
        {
            return list.first.next;
        }
        else
        {
            Node n = list.first;
            for (int i = 0; i < index - 1; i++) 
            {
                n = n.next;
                if(i==index)
                n.next = n.next.next;//skips over the existing element

            }
            return list.first;
        }
        }

}

// тестовый код клиента

public static void main(String[] args) {


        StdOut.print("Type the linked list:");
        Stack list = new Stack();
        int index;
        String in=StdIn.readLine();
        for(int i=0;i<=in.length();i++)
        {
         list.push(in);
        }
        StdOut.print("Type the index to be deleted:");
        index=StdIn.readInt();
        StdOut.println("Before deleting element at "+ index);
        StdOut.println(in);



        StdOut.println("After deleting element at "+ index);
        StdOut.print(list.delete(index,list).item);


}

}

1 Ответ

0 голосов
/ 02 октября 2018

В вашей функции delete () вы возвращаете list.first - что указывает на головной узел списка, а не на Node first* //newest node added*, верно?Я думаю, что вы должны просто возвращаться из функции, когда задача удаления завершена, вместо того, чтобы возвращать null или node.

Кроме того, когда вы просматриваете список в последнем операторе else, вы должныпереместите строку n = n.next; ниже проверки индекса.

Ваша функция delete () будет выглядеть примерно так:

public Node delete(int index,Stack list)
{  

    if (list.first== null) 
    {
        return;
    } else if (index == 0) 
    {
        return;
    }
    else
    {
        Node n = list.first;
        for (int i = 0; i < index; i++) 
        {
            //If the next Node of the current node is +1 the current index
            if(i+1==index)
            {
                n.next = n.next.next;//skips over the existing element
                return;
            }

            n = n.next;

        }
        return;
    }
 }

И:

list.delete(index,list).item; //call the delete function
StdOut.println("After deleting element at "+ index);
list.print(); //Print the list using its print function (assuming you have one)

Надеюсьэто помогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...