Reputation: 149
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){
}
Upvotes: 3
Views: 41449
Reputation: 2381
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;
}
Upvotes: 3
Reputation: 11
while (node != null) {
if (node.getNext() == null || head.getNext() == null) {
break;
} else if (head.getData() == data) {
head = head.getNext();
} else if (node.getNext().getData()==null&&data==null||node.getNext().getData().equals(data)) {
node.setNext(node.getNext().getNext());
} else {
node = node.getNext();
}
}
}
return head;
Upvotes: 1
Reputation: 48
Are you trying to remove the name from the node, or remove the node from the list? To remove the node from the list, use the LinkedList.remove(int index) method. You'll need to find the index of the node you want to remove first.
[edit] Like the others have said, you should try to solve the problem yourself, but here's a hint: you can access each node with LinkedList.get(int index). You can get the length of the list with LinkedList.size(). This is probably a good place for a "for" loop.
Upvotes: 0
Reputation: 718798
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.
Upvotes: 7