在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5 数据范围:链表长度满足0≤n≤1000,链表中的值满足1≤val≤1000
时间: 2024-03-25 17:37:11 浏览: 63
好的,这是一道链表操作的题目,我会尽力回答。针对这个问题,我们可以使用双指针的方法来解决。
具体来说,我们定义两个指针 pre 和 cur,初始时 pre 指向 NULL,cur 指向链表的头部 head。然后我们开始遍历链表,如果当前结点 cur 的值和下一个结点的值相等,那么就说明这是一个重复的结点,需要将其删除。我们可以用一个 while 循环来找到所有重复的结点,并将它们全部删除。删除的方法是将 pre 的 next 指针指向 cur 的下一个结点,然后删除 cur。
如果当前结点不是重复的结点,那么就将 pre 和 cur 同时向后移动一个结点。这样一直遍历到链表末尾,就可以删除所有重复的结点了。
下面是具体的代码实现:
```python
class Solution:
def deleteDuplication(self, head: ListNode) -> ListNode:
# 定义 pre 和 cur 指针
pre, cur = None, head
while cur:
# 如果当前结点 cur 是重复结点
if cur.next and cur.val == cur.next.val:
val = cur.val
# 使用 while 循环找到所有重复结点并删除
while cur and cur.val == val:
cur = cur.next
# 如果 pre 为 None,说明头结点也是重复结点,直接将 head 指向 cur
if not pre:
head = cur
# 否则将 pre 的 next 指向 cur
else:
pre.next = cur
# 如果当前结点 cur 不是重复结点
else:
# pre 和 cur 同时向后移动一个结点
pre, cur = cur, cur.next
return head
```
希望能够帮助你解决问题!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)