题目
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1\to1\to21→1→2,返回1 \to 21→2.
给出的链表为1\to1\to 2 \to 3 \to 31→1→2→3→3,返回1\to 2 \to 31→2→3.
数据范围:链表长度满足 0 \le n \le 1000≤n≤100,链表中任意节点的值满足 |val| \le 100∣val∣≤100
进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
示例1
输入:{1,1,2}
返回值:{1,2}
解题思路
1.如果链表为空或只有一个结点,则不存在重复元素
2.将链表的值依次放入列表中
3.若列表中不存在该值,并添加到列表中
4.将列表转换为链表
题解
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @return ListNode类
#
class Solution:
def deleteDuplicates(self , head: ListNode) -> ListNode:
# 如果链表为空或只有一个结点,则不存在重复元素
if head is None or head.next is None :return head
# 将链表的值依次放入列表中
p = head
l = []
while p:
# 若列表中不存在该值,并添加到列表中
if p.val not in l:
l.append(p.val)
p =p.next
# 将列表转换为链表
new_head = ListNode(l[0])
p =new_head
for i in l[1:]:
p.next = ListNode(i)
p = p.next
return new_head