Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java - how to delete a node from linkedlist?

This code is a table that has an option to Inert name, delete, show, and quit .

this code run's well but my only problem is on how to delete a chosen name in a node

class Node{

Node in;
String name;

public Node(){

    in = null;

}

public Node(String n){

    in = null;
    name = n;

}

public void setIn(Node n){

    in = n;

}

public Node getIn(){

    return in;

}

public void setName(String n){

    name = n;

}

public String getName(){

    return name;

}




 public class Main{

public static void main(String args[]){
    Scanner scan = new Scanner(System.in);
    LinkedList bi = new LinkedList();
    while(true){

        System.out.println("Choose!\n[a] Insert Name\n[b] Delete\n[c] Show\n[d] Exit");
        char c = scan.next().charAt(0);
        System.out.println();

        if(c == 'a'){

            System.out.print("Enter Name: ");
            bi.insert(scan.next());
            System.out.println();

        }
        else if(c == 'b'){

            System.out.print("Enter Name to delete: ");
            bi.delete(scan.next());
            System.out.println();
        }
        else if(c == 'c'){

            bi.show();
            System.out.println();

        }
        else if(c == 'd'){

            System.exit(0);

        }

    }

}

  }


class LinkedList{

private Node root;

public LinkedList(){

    root = null;
}

public void insert(String n){

    root = insert(root, n);

}

private Node insert(Node n, String r){

    if(n == null){

        n = new Node(r);

    }
    else{

        n.in = insert(n.in, r);

    }

    return n;

}

public void delete(String n){

    root = delete(root, n);

}

private Node delete(Node n, String r){




}

public void show(){

    show(root);

}

private Node show(Node n){
    if(n == null){

        System.out.println("Empy list!");

    }
    else{

        while(n!=null){

            System.out.println(n.getName());
            n = n.getIn();

        }

    }

    return n;
}

 }

*i don't know how to delete a node . What should i put on my delete method?

public void delete(String n){

    root = delete(root, n);

}

private Node delete(Node n, String r){




}
like image 783
user3505049 Avatar asked Jan 21 '26 15:01

user3505049


2 Answers

We could code this for you, but that misses the point.

Instead, I'm going to suggest that you draw the linked-list data structure on paper using boxes for the list nodes and fields of the nodes, and arrows for the pointers / references. Then draw more boxes for your algorithm's local variables ... and "hand execute" it. That will help you visualize what your code should be doing.

Once you have done this kind of thing a few times, you will be able to visualize in your head ...


can you please give me a sample ?

Sorry, but No. You will learn more by working it out for yourself. See above.

like image 73
Stephen C Avatar answered Jan 24 '26 09:01

Stephen C


To delete Node you actually need to update it's previous node's in to be deleting Node's in, and the left alone Node will eventually get garbage collected.

Just one catch if node to be deleted is the root node then update root node.

private Node delete(Node root, String data)
{
    //in case list is empty then return
    if(root==null) return n;
    //in case node to be deleted is root then just return next as new root
    if (root.name.equals(data)) return root.in;

    Node curr = root;
    while(curr.in!=null)
    {
        if (curr.in.name.equals(data))
        {
            //curr.in's referenced Node will be garbage collected (or run some cleanup manually on it)
            curr.in = curr.in.in;
            //we are done and root is same
            return root;
        }
        curr = curr.in;
    }
    //if here then not found and nothing changed
    return root;
}
like image 45
gitesh.tyagi Avatar answered Jan 24 '26 08:01

gitesh.tyagi