Skip to main content

A linked list with an api and documentation more to my liking

Project description

Another Linked List


Table of Contents


What is it?

  • An incomprehensive implementation of a doubly-linked list

Why create it?

  • I didn't like the api or documentation of other linked lists. I'm also new to python so this was a good way to learn.

Simple usage

from another_linked_list import LinkedList

# create a list with three nodes
ll = LinkedList(["a", "b", "d"])

# get the node with element "b"
bNode = ll.findFirstNode("b")

# insert "c" after bNode
ll.insertAfter(bNode, "c")

print(list(ll))
# prints ['a', 'b', 'c', 'd']

Api

class LinkedList([a list of elements])

  • the linked list holds a list of nodes. Each node holds an element (the value) along with pointers to the previous and next nodes. For the most part the methods are intended to allow you to work with the elements moreso than the nodes because that was my use-case. This design decision may change in the future to be more focused around the nodes.
  • all methods return self unless specified otherwise
  • all methods which take a list argument also accept an instance of LinkedList
  • in all code examples below, assume ll starts with LinkedList(["a", "c"])
  • the internal methods implemented are
    • __copy__
    • __iter__ (iterates over the elements, not the nodes)
    • __len__
    • __reversed__

Attributes

firstNode: node
print(ll.firstNode.element) # a
lastNode: node
print(ll.lastNode.element) # c

Methods

append(element)
ll.append('d')
print(list(ll)) # ['a', 'c', 'd']
copy() => LinkedList
appendAll(list)
ll.appendAll(['d', 'e'])
print(list(ll)) # ['a', 'c', 'd', 'e']
findFirstNode(element) => node
cNode = ll.findFirstNode(['c'])
print(cNode.element) # c
insertAfter(node, element)
ll.insertAfter(ll.firstNode, 'b')
print(list(ll)) # ['a', 'b', 'c']
insertAllAfter(node, list)
ll.insertAllAfter(ll.firstNode, ['b', 'd'])
print(list(ll)) # ['a', 'b', 'd', 'c']
insertAllBefore(node, list)
ll.insertAllBefore(ll.lastNode, ['b', 'd'])
print(list(ll)) # ['a', 'b', 'd', 'c']
insertBefore(node, element)
ll.insertBefore(ll.lastNode, 'b')
print(list(ll)) # ['a', 'b', 'c']
prepend(element)
ll.prepend('z')
print(list(ll)) # ['z', 'a', 'c']
prependAll(list)
ll.prependAll(['y', 'z'])
print(list(ll)) # ['y', 'z', 'a', 'c']
removeFirstElement(element)
ll.removeFirstElement('c')
print(list(ll)) # ['a']
removeNode(node)
ll.removeNode(ll.firstNode)
print(list(ll)) # ['c']

node

  • a node is just an instance of SimpleNamespace with three attributes
    • element: <can be anything>
    • next_: node
    • previous: node
print(ll.firstNode.element) # a
print(ll.firstNode.next_.element) # c
print(ll.lastNode.previous.element) # a
print(ll.firstNode.previous is None) # True

Test

#
# you must have poetry installed
#
$ poetry shell
$ poetry install
$ python runTests.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

another_linked_list-0.1.1.tar.gz (362.4 kB view details)

Uploaded Source

Built Distribution

another_linked_list-0.1.1-py3-none-any.whl (427.8 kB view details)

Uploaded Python 3

File details

Details for the file another_linked_list-0.1.1.tar.gz.

File metadata

  • Download URL: another_linked_list-0.1.1.tar.gz
  • Upload date:
  • Size: 362.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.15 CPython/3.7.3 Linux/5.1.2-arch1-1-ARCH

File hashes

Hashes for another_linked_list-0.1.1.tar.gz
Algorithm Hash digest
SHA256 15af2f29a24c71e6b6027fd1b048a56c8aa2fdc58e5e89f435a80c2851e5abeb
MD5 b79b45bf65a6bea3bab4ce48211daa2a
BLAKE2b-256 f67da35354a043cdc7d6141d84dca518b50649fed98162a2831143192ce9e2fe

See more details on using hashes here.

File details

Details for the file another_linked_list-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: another_linked_list-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 427.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.15 CPython/3.7.3 Linux/5.1.2-arch1-1-ARCH

File hashes

Hashes for another_linked_list-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ccc2d2a7336b07443830bd50e0d9f47d6760b8bbd2e60b8c1b947f1d75aeb97d
MD5 fb45f34adee46eb033c3a1ec30e3dfeb
BLAKE2b-256 a16534d2c1c1eda9239d37fbbbe879b92d0b8d12cc7e629346e6b7294bdcdd58

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page