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
的原因。
我对下面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
的原因。