java - 删除 LinkedListNode 中的第一个节点

标签 java linked-list nodes

我以为这个程序可以正常工作,但不幸的是我忽略了一些东西。如何删除第一个节点并将第二个节点转换为链表的前面。我尝试了多种方法,但最终得到了相同的结果。(LinkedList 保持不变)任何指导将不胜感激。

节点类

public class Node {

    private String data;
    private Node next;

    Node(String data, Node next)
    {
        this.data = data;
        this.next = next;
    }

    public void setData(String d)
    {
        data = d;
    }

    public void setNext(Node n)
    {
        next = n;
    }

    public String getData()
    {
        return data;
    }

    public Node getNext()
    {
        return next;
    }

主要

public static void main(String[] args) {

        Node list = new Node("NODE 1",new Node("NODE 2",new Node("NODE 3", null)));
        list = insertSecond(list,"New Node");
        list = addLast(list,"LAST NODE");

        printList(list);
        System.out.println();
        deleteNode(list, "NODE 1");
        printList(list);
    }

    public static Node deleteNode(Node list,String str)
    {
        Node temp = list;
        Node prev = list;

        while(temp != null)
        {
            if(temp.getData().equals(str))
            {
                if(temp.getData().equals(list.getData()))
                    {
                    list = list.getNext();
                    return deleteNode(list,str);
                    }
                else
                    {
                        prev.setNext(prev.getNext().getNext());
                    }
            }
            prev = temp;
            temp = temp.getNext();

        }

        return list;

最佳答案

您的deleteNode函数应该返回新列表的头部。仅在您描述的一种边缘情况下才需要这样做 - 删除该列表的头部。

list = deleteNode(list, str);

此外,您不需要递归执行 deleteNode 方法,迭代节点元素就足够了:

public static Node deleteNode(Node list, String str) {
    // I'm assuming that you are deleting the first inscance of the string
    Node temp = list;
    Node prev = list;

    while(temp != null) {
        if(temp.getData().equals(str)) {
            if(temp.getData().equals(list.getData())) {
                return list.getNext();
            }
            else {
                prev.setNext(temp.getNext());
                return list;
            }
        }
        prev = temp;
        temp = temp.getNext();
    }

    return list;
}

关于java - 删除 LinkedListNode 中的第一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795356/

相关文章:

c++ - 链表 - 使用后指针在末尾插入

c - 如何从C中的文本文件中读取数据到链表中

java - java 中的 Entry<K,V> 数组如何工作?

java - 自动装箱和重载

c++ - 意外的输出零

javascript - 如何在 JavaScript 中交换 DOM 子节点?

node.js - 无法访问对象内部的数据

java - 如何将对象获取到 "know"它是 LinkedList 中的一个节点?

java - PowerMock/EasyMock : Set expectation on final method that would throw exception

java - 尝试分派(dispatch) MouseEvent 时发生 Stackoverflow 错误。 mouseMoved 有效,但 mouseDragged 无效