Java中的单链表数据结构

时间:2016-01-24 21:18:11

标签: linked-list singly-linked-list

我对最后一次" 返回"感到困惑。下面链接列表的Java实现中的语句。

这是代码:

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

最后一次" 返回"陈述是" 返回头",但不应该是" 返回温度" ??我的解释是创建 temp 节点来复制头节点,并遍历整个链表。在此操作结束时,如果存在任何重复数据,则会修改 temp ,因此最后一个语句应为" 返回temp &#34 ;

上面我感到困惑的代码实际上是正确的,有人可以向我解释一下吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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