题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
解题思路及代码:
### 解题思路
题目给出的链表是排好序的链表,所以我们只需要设置两个快慢指针即可。
1.慢指针记录当前的结点,快指针是慢指针下一或下几个结点;
2.在循环中比较快慢指针的val值,如果不一致的话,快指针继续向前走;
3.如果有一致的值出现,慢指针的下一个结点直接指向快指针的下一个结点,即能完成删除相同的其余元素的操作;
4.最后重新设置快慢指针的起始为止即可,再次循环,直到遍历完整个链表。
### 代码
```python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
p = head
q = head.next
while q:
if q.val != p.val:
p = q
q = p.next
else:
p.next = q.next
q = p.next
return head
```
运行结果: