Java中的单链表数据结构

singly-linked list data structure in Java

我对下面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”语句是“returnhead”,但不应该是“return temp”??我的解释是创建temp节点复制头节点,遍历整个链表。在这个操作的最后,如果有重复的数据,修改的是temp,所以最后的语句应该是“returntemp".

上面我搞糊涂的代码其实是正确的,谁能给我解释一下?

谢谢!

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

例如,假设原始列表是 head --> a --> b --> c,其中 head,a,b,c 表示列表中的所有节点,并假设 a 的值与 b。为了删除重复项,我们有效地将 a 中的 "next" 指针更改为指向 c 而不是 b。这会产生修改后的列表 head --> a --> c。这个链表的头节点和原来链表的头节点是一样的,这就是我们returnhead的原因。