【问题标题】:singly-linked list data structure in JavaJava中的单链表数据结构
【发布时间】:2016-01-24 21:18:10
【问题描述】:

我对下面链表的 Java 实现中的最后一个“return”语句感到困惑。

代码如下:

//remove the node with duplicate data and return the linked list
static Node removeDuplicates(Node head) {

 if(head == null)
    return head;

  Node temp = head;
  while(null != temp.next) {
      if(temp.data == temp.next.data)
          temp.next = temp.next.next;
      else
          temp = temp.next;
  }
  return head;
}

最后一个“return”语句是“return head”,但不应该是“return temp”吗?我的解释是创建 temp 节点来复制头节点,并遍历整个链表。本次操作结束时,如果有重复数据,修改的是temp,所以最后一条语句应该是“return temp”。

上面我很困惑的代码实际上是正确的,谁能给我解释一下?

谢谢!

【问题讨论】:

    标签: linked-list singly-linked-list


    【解决方案1】:

    链接列表的句柄始终是列表的头部。该代码不会反转列表。它只删除重复项。更准确地说,如果 temp.data 与 temp.next.data 相同,则将删除 temp.next。 在这个过程中链表的头永远不会改变,因此返回原始头是正确的,因为它也是修改后的列表的头。

    例如,假设原始列表是head --> a --> b --> c,其中head,a,b,c 都表示列表中的节点,并假设a 的值与b 的值相同。为了删除重复项,我们有效地将a 中的“next”指针更改为指向c 而不是b。这将产生修改后的列表head --> a --> c。此列表的头节点与原始列表的头节点相同,这就是我们返回head 的原因。

    【讨论】:

    • 谢谢,但我还是很困惑。 =(..如果你返回原始头部,它不返回原始链表吗?假设你删除了一个重复数据的节点,修改后的链表将是 temp 节点。返回 temp 而不是 head 不是更有意义吗?
    • 我编辑了我的答案以添加更多解释。希望这会有所帮助:-)
    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多