Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用返回类型为node的函数从链表中删除节点_Java_Function_Object_Linked List_Return Type - Fatal编程技术网

Java 如何使用返回类型为node的函数从链表中删除节点

Java 如何使用返回类型为node的函数从链表中删除节点,java,function,object,linked-list,return-type,Java,Function,Object,Linked List,Return Type,我正在研究链表。我正在练习这本书中的问题:破解编码面试。我被卡住了,我不明白作者是如何实现下面的代码的,它应该删除一个节点 class Node { Node next = null; int data; public Node (int d) { data = d; } Node deleteNode(Node head, int d) { Node n = head; if (n.data == d) { return head

我正在研究链表。我正在练习这本书中的问题:破解编码面试。我被卡住了,我不明白作者是如何实现下面的代码的,它应该删除一个节点

class Node {

  Node next = null;
  int data;

  public Node (int d) {
    data = d;
  }

  Node deleteNode(Node head, int d) {
    Node n = head;

    if (n.data == d) {
      return head.next;
    }

    while (n.next != null) {
      if (n.next.data == d) {
         n.next = n.next.next;
         return head;
      }
      n = n.next;
    }
    return head;
  }
我有三个问题

问题1- 我们将传递什么作为函数deleteNode的参数?节点头的作用是什么?int d的作用是什么?节点头是我们要删除的节点吗?还是我们的头部节点?我的意思是,我们应该使用下面的方法,对吗

"Name of node".deleteNode("Node name", "integer value");
“节点名称”是我们要删除的节点…对吗

问题2-代码中明确指出,函数deleteNode仅使用数据来确认要删除的节点的标识。例如,如果(n.data==d)。这是正常的做法吗?我的意思是,如果我有两个不同的节点包含与数据值相同的整数怎么办?我们不应该使用节点的名称来指定要删除的节点吗


问题3-函数deleteNode返回一个节点。为什么呢?为了删除一个节点,我们只需要做3件事…首先,取消链接我们要删除的节点的指针。其次,将上一个节点的指针放在我们要删除的节点的指针最初指向的节点上。第三,删除未链接到列表的节点。我不知道返回类型节点在这里有什么用途…

问题1:在你的帖子中,你一直在谈论节点的“名称”,但节点没有名称。它们有一个
int
值和一个后继值,仅此而已。在这个
deleteNode
方法中,第一个参数是要从中删除第一次出现的值
d
的链表的头

问题2:正如我所说,节点没有名称,由其值标识。一旦找到所需值的匹配项,则无论链接列表中有多少相同值的匹配项,都会删除相应的节点

问题3:该方法返回列表的标题,以便您可以像这样链接多个调用

myList.deleteNode(head,3).deleteNode(head,5).addNode(head,10)
如果该方法具有
void
返回类型,则应该执行以下操作

myList.deleteNode(head,3);
myList.deleteNode(head,5);
myList.addNode(head,10);

调用deleteNode函数时,只传递整数参数。正如您在代码中看到的,它需要2个参数…解释?只是忘记了它,因为它是不寻常的。在这样的调用中,头实际上应该是
myList