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



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

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

我有3个问题。。。

问题1-我们将传递什么作为函数deleteNode的参数?Node头的作用是什么?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);

相关内容

  • 没有找到相关文章

最新更新