Sub: Update xorlist

Body:

==== End ====
This commit is contained in:
Shockwave 2022-11-26 10:28:32 +08:00
parent c1b3b9a9d6
commit 42aeecf17a
1 changed files with 13 additions and 7 deletions

View File

@ -34,15 +34,18 @@ class XorList:
def insert(self, data):
node = Node(data)
node_id = id(node)
# New node npx is XOR of current head and NULL
node.npx = id(self.head)
# New node npx is XOR of current head and id(None)
# node.npx = self.xor(node_id, id(self.head))
node.npx = id(self.head)
if self.head is not None:
if self.head is None:
# list is empty, set tail to the first node.
self.tail = node
else: # list is not empty, update npx of old head
old_head_npx = self.head.npx
self.head.npx = self.xor(node_id, old_head_npx)
else:
self.tail = node
# old_head_id = id(self.head)
# node.npx = self.xor(old_head_id, id(None))
self.__nodes.append(node)
self.head = node
@ -67,7 +70,7 @@ class XorList:
def backward(self):
print("backward visit list")
rear_id = NULL
rear_id = id(None)
curr_node = self.tail
if curr_node is None:
@ -85,7 +88,10 @@ class XorList:
"""
Returns a new instance of type points to the same memory
"""
return ctypes.cast(obj_id, ctypes.py_object).value
py_obj = ctypes.cast(obj_id, ctypes.py_object)
if not py_obj:
return None
return py_obj.value
if __name__ == '__main__':