【剑指offer】删除链表中重复的结点(python)
把所有值放到一个列表中,筛选出只出现一次的
遍历链表
while pHead: res.append(pHead.val) pHead = pHead.next
【初始思路,删除重复的】,让列表删除多个数
list = [x for x in list if list.count(x) > 1]
注意,list.count(val)统计列表list中val出现次数
【精简思路,只取数量为1的值】
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
res = list(filter(lambda c: res.count(c)==1, res))建立链表
首先,头结点 dummy = ListNode(0),这里 0 是随便赋值的,返回值不会包含。
然后,指针指向头结点 pre = dummy
然后,指针逐个向后
node = ListNode(i)
pre.next = node
pre = pre.next
最后,返回整个链表,但不返回头结点,return dummy.next# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def deleteDuplication(self, pHead): # write code here num = [] while pHead: num.append(pHead.val) pHead = pHead.next res = list(filter(lambda c: num.count(c) == 1, num)) dummy = ListNode(0) pre = dummy for i in res: node = ListNode(i) pre.next = node pre = pre.next return dummy.next