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")

# prints ['a', 'b', 'c', 'd']


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__


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


print(list(ll)) # ['a', 'c', 'd']
copy() => LinkedList
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']
print(list(ll)) # ['z', 'a', 'c']
ll.prependAll(['y', 'z'])
print(list(ll)) # ['y', 'z', 'a', 'c']
print(list(ll)) # ['a']
print(list(ll)) # ['c']


  • 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


# you must have poetry installed
$ poetry shell
$ poetry install
$ python

Project details

Download files

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

Files for another-linked-list, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size another_linked_list-0.1.1-py3-none-any.whl (427.8 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size another_linked_list-0.1.1.tar.gz (362.4 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page