当前位置: 代码迷 >> java >> 执行`LinkedList`。 删除特定的“链接”(`Node`)
  详细解决方案

执行`LinkedList`。 删除特定的“链接”(`Node`)

热度:66   发布时间:2023-08-04 09:26:27.0

伙计们,我仍然遇到方法public void deleteLink(String data)麻烦,我需要用给定的String data删除指定的Link 我已经实现了它但仍然无法正常工作。 请问smb请看一下deleteLink()方法,看看有什么问题? 其他方法都运行正常。 提前致谢!

package LinkedList;

public class Link{

    public Link next;
    private String data;

    public Link(String data){
        this.data = data;
        this.next = null;
    }

    public void display(){
        System.out.println(data);
    }

    public String getData(){
        return this.data;
    }
}

class LinkedList{

    private Link firstLink;

    public LinkedList(){
        this.firstLink = null;
    }

    public boolean isEmpty(){
        return (this.firstLink == null);
    }

    public void insert(String data){
        Link newLink = new Link(data);
        newLink.next = firstLink;
        firstLink = newLink;
    }

    public Link deleteFirst(){
        Link deletedOne = null;
        if(isEmpty()){
            System.out.println("The list is empty");
            System.exit(0);
        }
        else{
            deletedOne = firstLink;
            firstLink = firstLink.next;
        }
        return deletedOne;
    }

    public boolean search(String data){
        if(isEmpty()){
            System.out.println("The list is empty");
            System.exit(0);
        }
        else{
            Link current = firstLink;
            while(current != null){
                if(current.getData().equals(data)){
                    return true;
                }
                else{
                    current = current.next;
                }
            }
        }
        return false;
    }

    public void deleteLink(String data){
        if(isEmpty()){
            System.out.println("The list is empty.");
            System.exit(0);
        }
        else{
            Link current = firstLink;
            Link previous = firstLink;
            while(current != null){
                if(current.getData().equals(data)){
                    previous = current.next;
                    break;
                }
                else{
                    previous = current;
                    current = current.next;
                }
            }
        }
    }

    public void displayList(){
        if(isEmpty()){
            System.out.println("The list is empty");
            System.exit(0);
        }
        else{
            Link current = firstLink;
            while(current != null){
                current.display();
                current = current.next;
            }
        }
    }
}

分配

previous = current.next;

不会更改链接列表中的任何内容。

你应该做一个如下的任务:

previous.next = current.next;

这将使被删除节点之前的节点指向被删除节点之后的节点。

当然,您也没有处理被删除节点是第一个节点的情况。 这种情况应该单独处理。

public void deleteLink(String data){
    if(isEmpty()){
        System.out.println("The list is empty.");
        System.exit(0);
    }
    else{
        if (firstLink.getData().equals(data)) {
            firstLink = firstLink.next;
        } else {
            Link current = firstLink.next;
            Link previous = firstLink;
            while(current != null){
                if(current.getData().equals(data)){
                    previous.next = current.next;
                    break;
                } else {
                    previous = current;
                    current = current.next;
                }
            }
        }
    }
}
  相关解决方案