Java Linked List search and delete method

浪子不回头ぞ 提交于 2019-12-17 16:54:15

问题


I have a project for computer science class and have everything done except for one method. The delete method. Basically I am making a linked list from user input and I need to be able to delete all nodes (which is done) and delete a single specified node. So I need to search through the list of nodes find the one to delete and delete it. Anything that can help is appreciated. If you have a solution please offer an explanation as I am trying to learn and just solve the problem.

I'm not going to give you the GUI because I don't think it is necessary but here is the node class.

public class MagazineList {
private MagazineNode list;

    public MagazineList(){
        list = null;
    }


public void add(Magazine mag){
    MagazineNode node = new MagazineNode(mag);
    MagazineNode current;

    if(list == null) {
        list = node;
    }
    else {
        current = list;
        while(current.next != null)
            current = current.next;
        current.next = node;
    }   
}
public void insert(Magazine mag) {
  MagazineNode node = new MagazineNode (mag);

  // make the new first node point to the current root
  node.next=list;

  // update the root to the new first node
  list=node;
}

public void deleteAll() {
    if(list == null) {

    }

    else {
        list = null;
    }
}
public void delete(Magazine mag) {
    //Delete Method Goes Here
}

public String toString(){
    String result = " ";

    MagazineNode current = list;
    while (current != null){
        result += current.magazine + "\n";
        current = current.next;     
    }
    return result;
}
private class MagazineNode {
    public Magazine magazine;
    public MagazineNode next;


    public MagazineNode(Magazine mag){
        magazine = mag;
        next = null;
    }
}
}

UPDATE

Here is the method I put together and it goes through the first part into the while loop and never recognizes the same item in the list. I used the exact same thing for the input and delete methods yet it will not recognize it. Any help is appreciated.

public void delete (Magazine mag) {
MagazineNode current = list;
MagazineNode before;

before = current;

if(current.equals(mag)){
    before.next = current;
    System.out.println("Hello");
}

while ((current = current.next)!= null){
    before = current.next;
    System.out.println("Hello Red");

    if(current.equals(mag)){
        current = before;
        System.out.println("Hello Blue");
    }
}
 }

回答1:


Without spoon feeding you the answer. deletion is a bit like removing one link of a chain - you cut out the link and join up the two (new) ends.

So, deleting "B" would mean changing

A --> B --> C --> D

to this

A --> C --> D


In pseudo code, the algorithm would be:

  • start the algorithm with the first node
  • check if it is the one you want to delete
  • if not, go to the next node and check again (go back to the previous step)
  • if so, make the next node of the previous node the next node of this node
  • remove the reference from this node to the next node



回答2:


public void delete (Magazine mag) {
    MagazineNode current = this.list;
    MagazineNode before;

    //if is the first element
    if (current.equals(mag)) {
        this.list = current.next;
        return;     //ending the method
    }


    before = current;

    //while there are elements in the list
    while ((current = current.next) != null) {

        //if is the current element
        if (current.equals(mag)) {
            before.next = current.next;
            return;     //endind the method 
        }

        before = current;
    }

    //it isnt in the list
}

the comments should explains whats happening




回答3:


All you need to do is search through the list, keeping track of where you are. When the node you want to delete is in front of you, set the current node's "next" to the one after the one you want to delete:

for(Node current = list; current.next() != null; current = current.next()){
   if(current.next().magazine().equals(toDelete)) current.setNext(current.next().next());
}

Something like that. Hope that helps!



来源:https://stackoverflow.com/questions/13638289/java-linked-list-search-and-delete-method

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!