例如:
我的问题是为什么返回的对象是head
而不是node
?为什么node.next
表示节点遍历移动到下一个节点?我很困惑:
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null)
return null;
ListNode node = head;
while(node.next != null) {
if(node.val == node.next.val) {
node.next = node.next.next;
} else {
node = node.next;
}
}
return head;
}
}
答案 0 :(得分:2)
为了帮助理解,我会在字母后面添加字母以查看不同的实例,例如:如果原始列表是1→1→1→2→2→3→3,那么将是1a→1b→1c→2a→2b→3a→3b
目标是删除重复项,并按如下方式进行:
从头开始:node = head
↓
1a→1b→1c→2a→2b→3a→3b
删除1b:node.next = node.next.next
↓
1a→1c→2a→2b→3a→3b
删除1c:node.next = node.next.next
↓
1a→2a→2b→3a→3b
前进:node = node.next
↓
1a→2a→2b→3a→3b
删除2b:node.next = node.next.next
↓
1a→2a→3a→3b
前进:node = node.next
↓
1a→2a→3a→3b
删除3b:node.next = node.next.next
↓
1a→2a→3a
退出循环:node.next != null
返回更新列表:head
↓
1a→2a→3a
正如您所看到的那样,node.next = node.next.next
实际上并没有让您前进,但是为了让您向目标前进一步。
您必须返回head
,否则您只需返回最后一个节点,即
↓
3a
你并不想要那个。
答案 1 :(得分:0)
该函数返回一个列表;列表由头节点表示。至于关于node.next的一点:因为这是它的目的。