我对最后一次" 返回"感到困惑。下面链接列表的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 ;
上面我感到困惑的代码实际上是正确的,有人可以向我解释一下吗?
谢谢!
答案 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
的原因。