【问题标题】:How to delete a node from a linked list using a function with node as a return type如何使用以节点为返回类型的函数从链表中删除节点
【发布时间】:2014-10-04 08:54:24
【问题描述】:

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

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 head 的作用是什么? int d 的作用是什么?节点头是我们要删除的节点吗?还是我们的头节点?我的意思是,我们应该使用下面的方法对吗?

"Name of node".deleteNode("Node name", "integer value");

“节点名称”就是我们要删除的节点……对不对?

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

问题 3 - 函数 deleteNode 返回一个节点。这是为什么?为了删除一个节点,我们只需要做 3 件事……首先,取消链接我们要删除的节点的指针。其次,把前一个节点的指针,放到我们要删除的节点指针原来指向的那个节点上。第三,删除未链接到列表的节点。我看不出返回类型节点在这里有什么作用......

【问题讨论】:

    标签: java function object linked-list return-type


    【解决方案1】:

    问题 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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2021-03-10
    相关资源
    最近更新 更多