#思路
1、首先明确链表在某种程度上相当于一条牵引绳,temp=head之后,链表也可由temp主导,两个指针,一个当探子,一个走探子走过的路
2、想到重复元素可以用哈希表,先定义,然后想到如果链表为非空,那第一个元素需要被保留, 使用hash[head.val]=1
3、写出双指针框架,此框架针对于探子指针
4、用哈希表判断curr目前遍历的是不是重复元素,然后更新哈希表
5、接着将此元素链接到表头,更新temp指针
6、temp会成为最后一个结点的指针,跳出循环后,需要指向None,否则如果后面都是重复元素,temp仍然停留在最后一个不重复结点上,打印时,因为没有明确结尾,所以后面重复元素也被打印;此外可能会引发后续不可预期的问题,比如无限循环(如果后续节点形成了环)或者访问到不应该访问的数据等。
#代码
class Solution:
def removeDuplicateNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head==None:
return None
temp=head
hash=[0 for i in range(20001)]
curr=head.next
hash[head.val]=1
while curr:
if hash[curr.val]==0:
hash[curr.val]=1
temp.next=curr
temp=temp.next#这是移动指针的固定语法
curr=curr.next
temp.next=None
return head