python中的xor双链表

时间:2019-04-02 22:54:23

标签: python algorithm data-structures

我有以下练习面试问答。 请帮忙。

我不明白为什么它需要c数据结构。

我不明白为什么它需要垃圾收集以及为什么需要它。

我不明白为什么需要def _get_obj(id)?

import ctypes

# This is hacky. It's a data structure for C, not python.

class Node(object):
    def __init__(self, val):
        self.val = val
        self.both = 0


class XorLinkedList(object):
    def __init__(self):
        self.head = self.tail = None
        self.__nodes = [] # This is to prevent garbage collection

    def add(self, node):
        if self.head is None:
            self.head = self.tail = node
        else:
            self.tail.both = id(node) ^ self.tail.both
            node.both = id(self.tail)
            self.tail = node

        # Without this line, Python thinks there is no way to reach nodes between
        # head and tail.
        self.__nodes.append(node)


    def get(self, index):
        prev_id = 0
        node = self.head
        for i in range(index):
            next_id = prev_id ^ node.both

            if next_id:
                prev_id = id(node)
                node = _get_obj(next_id)
            else:
                raise IndexError('Linked list index out of range')
        return node


def _get_obj(id):
    return ctypes.cast(id, ctypes.py_object).value

0 个答案:

没有答案