请从已经排序好的链表中删除重复的节点,保证每个节点只出现一次。
时间: 2023-05-30 21:01:31 浏览: 91
算法思路:
1. 遍历链表,若当前节点的值与下一个节点的值相等,则将下一个节点删除。
2. 删除节点时,将当前节点的 next 指针指向下一个节点的 next 指针,即跳过下一个节点。
3. 若当前节点与下一个节点的值不相等,则将当前节点指向下一个节点,继续遍历。
4. 最后返回链表的头节点即可。
算法实现:
C++ 代码:
```cpp
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head->next) return head; // 空链表或只有一个节点,直接返回
ListNode* cur = head;
while (cur->next) {
if (cur->val == cur->next->val) {
ListNode* tmp = cur->next;
cur->next = tmp->next;
delete tmp;
} else {
cur = cur->next;
}
}
return head;
}
```
Python 代码:
```python
def deleteDuplicates(head: ListNode) -> ListNode:
if not head or not head.next: return head # 空链表或只有一个节点,直接返回
cur = head
while cur.next:
if cur.val == cur.next.val:
tmp = cur.next
cur.next = tmp.next
del tmp
else:
cur = cur.next
return head
```
阅读全文