0

我以为我有这个程序工作,但不幸的是我忽略了一些东西。如何删除第一个节点并将第二个节点转换为链表的前面。我尝试了多种方法,但最终得到相同的结果。(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;
4

1 回答 1

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;
}
于 2013-04-03T18:44:13.207 回答