多个节点链表的内容



我有一个编程挑战,那就是递归地多重数据后面的列表节点。例如

2 - 4 - 6 - 8

将是

384 - 192- 48 - 8

这就是我到目前为止在 void 产品方法中所做的。我不断收到空指针异常。我的产品方法有什么问题

 class Node
      {
        private int data;
        private Node next;
        private Node prev;
        public Node(int newData,Node newNext,Node newPrev)
        {
          data = newData;
          next = newNext;
          prev = newPrev;
        }
        public int getData() 
        { 
          return data; 
        }
        public void setData(int otherData)
        {
          this.data = otherData;
        }
        public Node getNext() 
        { 
          return next; 
        }
        public Node getPrev() 
        { return prev; 
        }
        public void setNext(Node newNext)
        {   
          next = newNext; 
        }
        public void setPrev(Node newPrev)
        {
          prev = newPrev;
        }
      }

    class LinkedList
      {
        private Node head;
        private Node start;
        private Node end;
        public LinkedList()
        { 
          head = null; 
          start = null;
          end = null;
        }
        public void insert(int data)
        {
          Node newNode = new Node(data,null,null);
          if(start == null)
          {
            start = newNode;
            end = start;
          }
          else
          {
            newNode.setPrev(end);
            end.setNext(newNode);
            end = newNode;
          }
        }
        public void product()
        {
          product(head);   
        }
        public void product(Node head)
        {
          Node next = head.getNext();
          if(head == null)
          {
            return;
          }
          else
          {
            int data = head.getData() * next.getData();
            head.setData(data);
            product(head.getNext());
          }
        }
      }

您正在调用head.getNext()next.getData()而不检查headnext中的任何一个是否为空,因此程序将在处理最后一个节点时崩溃。即便如此,您也只是将两个连续的项目相乘,而不是累加乘积。

你可以利用函数的返回值来累积正确答案:

    public void product()
    {
      product(head);   
    }
    public int product(Node head)
    {
      if(head == null)
      {
        return 1;
      }
      else
      {
        int data = head.getData() * product(head.getNext());
        head.setData(data);
        return data;
      }
    }
我没有

检查整个代码的逻辑,但首先想到的是你分配:

Node next = head.getNext();

然后你检查if(head == null)但是if(next == null)呢?
如果是,那么您的错误就在这里:

next.getData()

因为head可以是非null,但它的next肯定是可以null的。


正确的做法是先检查if(head == null),然后分配Node next = head.getNext();然后检查if(next == null)

首先,在head上调用getNext()方法,然后检查head是否null?这显然是错误的。

您应该首先检查head是否null。然后你应该检查next是否null .

此外,我认为您的递归不会正确计算乘积,因为您将current中的数据与当前next中的数据相乘 - 您可以通过简单的循环来实现这一点。

相反,您应该调用product(next)然后再计算产品。像这样(虽然没有测试)

public void product(Node head)
{  
  if (head == null)
    return;
  Node next = head.getNext();   
  product(next);
  if (next != null)
  {
    int data = head.getData() * next.getData();
    head.setData(data);
  }
}

最新更新