删除双向链表中的重复结点
时间: 2023-10-11 20:10:55 浏览: 186
要删除双向链表中的重复节点,可以使用哈希表记录已经出现的节点值,然后遍历链表,如果当前节点的值已经在哈希表中出现过了,就将该节点从链表中删除。以下是代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None, prev=None):
self.val = val
self.next = next
self.prev = prev
def delete_duplicates(head: ListNode) -> ListNode:
if not head:
return head
visited = set()
visited.add(head.val)
curr = head.next
while curr:
if curr.val in visited:
prev = curr.prev
prev.next = curr.next
if curr.next:
curr.next.prev = prev
else:
visited.add(curr.val)
curr = curr.next
return head
```
在这个算法中,我们首先创建一个哈希表 `visited`,用来记录已经出现的节点值。我们遍历链表,如果当前节点的值已经在哈希表中出现过了,就将该节点从链表中删除。否则,将当前节点的值添加到哈希表中。
这个算法的时间复杂度为 $O(n)$,其中 $n$ 是链表中节点的数量。空间复杂度也为 $O(n)$,因为我们需要使用哈希表来记录已经出现的节点值。
阅读全文