有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在链表变量初始化方面遇到问题

我的Delete(Node p)方法遇到了问题,我几乎已经完全完成了,但每当我尝试编译它时,它都会说previous之前可能没有初始化过。特别是在下面这个方法中的then if语句中。我对链表是全新的,所以我只是想练习正确的语法。任何帮助都会很棒。谢谢各位

public Node delete(Node p)
    {
        Node current, previous;
        current = head.next;

        while (current.info != p.info && current.next != null)
        {
            previous = current;
            current = current.next;
        }

        if (current.info == p.info)
        {
            previous.next = current.next;
            //this previous here is what is giving me trouble
        }
        return current;
    }

//故障方法结束,整个代码开始

public class LinkedList
    {
        Node head;

        public class Node
        {
            int info;
            Node next;
            Node(int d)
            {
                info = d;
                next = null;
            }
        }

        public void insertAfter(Node prevnode, int new_info)
        {
            if (prevnode == null)
            {
                System.out.println("The given previous node cannot be null");
                return;
            }
            Node newnode = new Node(new_info);
            newnode.next = prevnode.next;
            prevnode.next = newnode;
        }

        public void insertEnd(int new_info)
        {
            Node newnode = new Node(new_info);
            if (head == null)
            {
                head = new Node(new_info);
                return;
            }
            newnode.next = null;
            Node last = head;
            while(last.next != null)
            {
                last = last.next;
            }
            last.next = newnode;
            return;
        }

        public void insertFirst(int new_info)
        {
            Node newnode = new Node(new_info);
            newnode.next = head;
            head = newnode;
        }

        public Node delete(Node p)
        {
            Node current, previous;
            current = head.next;

            while (current.info != p.info && current.next != null)
            {
                previous = current;
                current = current.next;
            }

            if (current.info == p.info)
            {
                previous.next = current.next;
            }
            return current;
        }

        public void printList()
        {
            Node tnode = head;
            while (tnode != null)
            {
                System.out.print(tnode.info + " ");
                tnode = tnode.next;
            }
        }

        public static void main(String[] args)
        {
            LinkedList slist = new LinkedList();
            slist.insertEnd(6);
            slist.insertFirst(7);
            slist.insertFirst(1);
            slist.insertEnd(4);
            slist.insertAfter(slist.head.next, 8);

            System.out.println("Top Ten Gaming Scores Are: ");
            slist.printList();

        }
    }

共 (2) 个答案

  1. # 1 楼答案

    如果while循环中的条件: while (current.info != p.info && current.next != null)永远不会计算为true,您不会进入循环,正如警告所说previous在您使用它时可能不会初始化

    在if语句中使用previous != null之前,应该确保检查它

  2. # 2 楼答案

    您必须始终初始化local variables。在while块之前设置previous =null将解决您的问题

    public Node delete(Node p)
        {
            Node current; 
            Node previous =null;
            current = head.next;
    
            while (current.info != p.info && current.next != null)
            {
                previous = current;
                current = current.next;
            }
    
            if (current.info == p.info)
            {
                previous.next = current.next;
                //this previous here is what is giving me trouble
            }
            return current;
        }