有一个非空整数单链表L,设计一个算法删除值重复的节点,多个值相同的节点仅保留第一个。 输入 8 1 4 1 2 2 1 3 4 输出 1 4 2 3 样例输入 8 1 4 1 2 2 1 3 4 样
时间: 2024-09-22 13:05:25 浏览: 25
这是一个经典的链表问题,需要我们遍历链表并跟踪每个节点的值是否已经出现过。如果遇到重复的值,我们可以跳过后面的同值节点。以下是解决方案的大致步骤:
1. 定义一个辅助结构,比如`VisitedNode`,用于记录每个已访问过的节点及其对应的值。
2. 创建两个指针,一个指向链表头(`head`),另一个(`current`)初始化为`NULL`。
3. 当`current`不为空时,比较`current->val`和`visited`中的值。如果不同,将当前节点添加到结果链表并将`visited`更新为当前节点;如果相同,则直接移动`current`到下一个节点。
4. 遍历完成后,将`head`设置为结果链表的第一个节点。
Python伪代码示例:
```python
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
visited = {None: None}
dummy = ListNode(0)
dummy.next = head
current = head
while current:
if current.val not in visited:
visited[current.val] = current
current = current.next
else:
next_to_visit = visited[current.val].next
visited.pop(current.val)
current.next = next_to_visit
current = next_to_visit
return dummy.next
```
在这个例子中,输入是一个包含重复值的链表,输出则是去掉了重复值的新链表,只保留了第一次出现的节点。样例输入和输出描述了一个具体的使用场景。
阅读全文