(2) 设单链表以非递减有序排序,设计算法实现在单链表中删去值相同的多余结点。
时间: 2024-10-09 21:08:02 浏览: 65
给定一个已经按非递减顺序排列的单链表,我们需要删除所有值相同的相邻节点,使其保持唯一。这里可以采用迭代的方式实现:
首先,创建两个指针 `curr` 和 `prev`,初始化 `prev` 为 `None`,`curr` 为链表的第一个节点。
然后进入循环,直到 `curr` 指针到达链表的末尾:
1. 检查 `curr` 的值是否等于 `prev` 的值。如果是,则说明 `curr` 是重复的,需要删除它。
- 将 `prev` 的 `next` 赋值给 `curr`,即 `prev.next = curr.next`,使得 `curr` 被删除,然后移动 `prev` 到 `curr` 的位置,准备处理下一对可能的重复节点。
2. 如果 `curr` 的值大于 `prev` 的值,说明找到一个新的不重复的节点,不需要删除,所以只需要移动 `prev` 和 `curr` 都向前一步:`prev = curr`, `curr = curr.next`。
最后,返回新的链表头 `prev`(因为在循环结束时,`prev` 正好指向了新的链表头部)。
以下是伪代码示例:
```python
def delete_duplicates(head):
if head is None:
return head
prev = None
curr = head
while curr is not None:
if prev is None or curr.val != prev.val:
prev = curr
curr = curr.next
return prev
```
阅读全文
相关推荐
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![c](https://img-home.csdnimg.cn/images/20250102104920.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)