【剑指offer】删除链表中重复的结点(python)

  1. 把所有值放到一个列表中,筛选出只出现一次的

  2. 遍历链表

    while pHead:
        res.append(pHead.val)
        pHead = pHead.next
  3. 【初始思路,删除重复的】,让列表删除多个数

    list = [x for x in list if list.count(x) > 1]

    注意,list.count(val)统计列表list中val出现次数

  4. 【精简思路,只取数量为1的值】

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
    res = list(filter(lambda c: res.count(c)==1, res))

  5. 建立链表
    首先,头结点 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