当前位置: 首页 > 面试题库 >

java-如何从链表中删除节点?

邵昆琦
2023-03-14
问题内容

这段代码是一个表,可以选择“惰性名称”,“删除”,“显示”和“退出”。

该代码运行良好,但是我唯一的问题是如何删除节点中的所选名称

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;
}

 }

*我不知道如何删除节点。我应该在删除方法上加上什么?

public void delete(String n){

    root = delete(root, n);

}

private Node delete(Node n, String r){




}

问题答案:

要删除Node,您实际上需要更新它的上一个节点的位置以删除Node的位置,而剩下的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;
}


 类似资料:
  • 我有一个单链表。如果我想从这个链表中删除一个已知的元素,我能做什么? 例如:节点*头;(44)节点*尾部;(39) 链接列表:44 27 59 13 45 39我们想从中删除45。得到:4427591339 我只知道从列表中删除第一个元素(如果元素(需要删除)是列表的第一个元素)。我得到了:头=头- 如何从列表中删除中间节点?

  • 我在以递归方式从循环单链表中删除单个节点/值时遇到了一些问题(当然,如果可能的话)。我的代码只从中间删除,而不是从第一个或最后一个地方删除。 在以递归方式删除其中一个连接后,我不知道如何建立连接。我的意思是,如果我要删除第一个元素,那么我需要将最后一个节点连接到下一个节点。 这是我的代码: 参数和返回: 查找尾部功能:

  • 我理解得对吗?(从虚拟节点开始) dummy->a->b->c->d->dummy(环绕到dummy节点) 因此,如果我想删除第一个实际的数据段(A),我需要将它分配给一个临时变量。所以Node first=head.next。然后我需要有一个虚拟的头部引用“B”,所以我需要做head.next=first.next。这就是所有需要做的吗? 在从列表中删除任何节点N的情况下(假设它在列表中),这是

  • 所以我有一个链接列表,我希望能够删除一个数字的第一次出现, 我正在尝试使用递归,但不幸的是,我最终只能删除列表的头部 我有三个不同的类,一个用于末尾的空列表,另一个类声明这个方法和实际的列表。

  • 如何通过引用对象或特定节点,有效地从java的LinkedList中删除节点?使用remove(object)遍历整个列表,文档证明了这一点:“删除第一个元素e,以便(o==null?e==null:o.equals(e))”。我可以通过对节点的特定引用来删除吗?我不介意将对节点的引用存储在对象本身中。我不能使用列表的索引,因为它可能会改变。如果没有,是否有另一种数据结构允许我这样做?

  • 我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果