python - 链表去重

  不允许使用额外数据结构。
  代码:

class Node:
    def __init__(self, data=None):
        self.next = None
        self.data = data

    def get_data(self):
        return self.data

    def get_next(self):
        return self.next

    def remove_after(self):
        self.next = self.next.next


class LinkedList:
    def __init__(self):
        self.__head = None

    def __str__(self):
        p = self.__head
        res = []
        while p:
            if p.get_data():
                res.append(p.get_data())
            p = p.get_next()
        return '[' + ', '.join([str(_) for _ in res]) + ']'

    def get_head(self):
        return self.__head

    def add_node(self, node: Node):
        if not self.__head:
            self.__head = node
        else:
            p = self.__head
            while p.get_next():
                p = p.get_next()
            p.next = node


def remove_duplicates(linkedlist: LinkedList):
    p = linkedlist.get_head()
    q = p.get_next()
    d = {p.get_data(): True}
    while p and q:
        if q.get_data() in d:
            p.remove_after()
            q = p.get_next()
            continue
        elif q.get_data():
            d[q.get_data()] = True
        p = p.get_next()
        q = p.get_next()


l = LinkedList()
l.add_node(Node(1))
l.add_node(Node(2))
l.add_node(Node(1))
l.add_node(Node(2))
l.add_node(Node(1))

print(l)
remove_duplicates(l)
print(l)

  输出:

[1, 2, 1, 2, 1]
[1, 2]

  

猜你喜欢

转载自www.cnblogs.com/darkchii/p/13208422.html