删除LinkedListNode中的第一个节点

时间:2013-04-03 18:39:35

标签: 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;

1 个答案:

答案 0 :(得分:2)

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