feat: Add XOR-based doubly linked list mode for memory efficiency #709
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
References to other Issues or PRs or Relevant literature
Fixes #692
Brief description of what is fixed or changed
This PR implements a memory-efficient XOR-based doubly linked list mode for
DoublyLinkedList.What is XOR Linked List?
An XOR linked list stores a single pointer containing the XOR of adjacent node addresses instead of two separate pointers, reducing memory usage while maintaining bidirectional traversal capability.
Implementation:
modeparameter toDoublyLinkedList.__new__()with options:'standard'(default) or'xor'links=['both']to store XOR of adjacent node IDs_id_to_nodedictionary for node reference tracking (simulates pointer dereferencing in Python)insert_after(),insert_before(),insert_at(),extract()__getitem__(),__str__(), andsearch()for XOR traversal supportTesting:
test_DoublyLinkedList_XOR()- Full feature test matching standard mode behaviortest_DoublyLinkedList_XOR_vs_Standard()- Parity test between modestest_DoublyLinkedList_XOR_EdgeCases()- Edge cases (empty, single, large lists)test_DoublyLinkedList_InvalidMode()- Error handlingUsage Example: