创建一个非递减序(有重复值)的单链表,实现删除值相同的多余结点。
时间: 2024-11-13 12:23:22 浏览: 6
创建一个非递减序(允许存在重复值)的单链表,并实现删除多余相等节点的功能,可以按照以下步骤来设计算法:
1. **初始化链表**:首先创建一个链表节点结构,包含数据域 `val` 和指向下一个节点的指针 `next`。
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
```
2. **遍历链表**:设置两个指针 `prev`, `curr` 分别指向当前节点和前一个节点。开始从头节点 `head` 开始遍历。
3. **比较节点**:如果 `curr` 的值等于 `prev` 的值并且 `prev` 不为空,说明当前节点是多余的,需要删除。将 `prev` 的 `next` 指向 `curr.next`。
4. **移动指针**:如果 `curr` 不是多余的节点,则更新 `prev` 和 `curr` 指针,继续向前遍历,直到链表末尾。
5. **处理特殊情况**:当 `curr` 为 None 时,检查 `prev` 是否为最后一个节点,如果不是,因为最后一个节点可能是重复的,也需要将其链接到实际值为 `prev.val` 的节点上。
6. **返回新链表头**:最后返回经过处理后的链表头节点 `head`。
以下是 Python 伪代码表示:
```python
def deleteDuplicates(head):
if not head or not head.next:
return head
prev = head
curr = head.next
while curr:
if curr.val == prev.val and prev != head:
prev.next = curr.next
else:
prev = curr
curr = curr.next
# 如果最后一个节点是重复的,连接正确的值
if prev.val == curr.val and prev != head:
prev.next = head
return head
```
阅读全文