python给定一个单向链表。任务是从给定列表(如果存在)中删除重复项(具有重复值的节点) 注意:尽量不要使用额外的空间。节点以排序方式排列。
时间: 2024-10-12 10:15:54 浏览: 18
在Python中,如果你有一个已经按照升序排列的单向链表,并希望删除所有重复的节点,可以采用迭代的方式实现,不需要额外的空间。这里是一种常见的双指针算法:
1. 初始化两个指针 `prev` 和 `curr`,分别指向链表的头节点和第二个节点。
2. 当 `curr` 非空时,进入循环:
- 比较 `prev.val` 和 `curr.val` 的值:
- 如果相等,说明找到了重复节点。因为链表已排序,我们可以直接删除 `curr` 节点,同时将 `prev` 移动到下一个节点:`prev.next = curr.next`。
- 如果不相等,将 `prev` 更新为 `curr`,继续检查下一个节点:`prev = curr`。
3. 循环结束后,链表中最后一个节点之前的所有节点都不再有重复。
以下是Python代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def deleteDuplicates(head):
if head is None or head.next is None:
return head
# 创建两个指针,prev用于记录上一个节点,curr用于移动
prev = head
curr = head.next
while curr is not None:
if prev.val == curr.val:
# 删除重复节点
prev.next = curr.next
else:
# 更新prev
prev = curr
curr = curr.next
return head
```
阅读全文