Project: Linked Lists
Learning how nodes work by writing them, and building a linked list, will give you a solid understanding for learning about a more complex subject in the next section, trees.
Introduction
In our previous lesson, we looked at Nodes
, Linked Lists
and Trees
; the latter two being core data structures
to add to your repetoire, and Nodes
being the foundation those data structures
are built upon.
As stated previously, if your language of choice is Ruby
or JavaScript
, in practice you won't have to concern yourself with implementing Linked Lists
as Arrays
are not a fixed sized in these languages. However, learning how Nodes
work by writing them, and building a Linked List
with them; will give you a working understanding of how Linked Lists
work, and give you a solid, founding principle for tackling the bigger task ahead...
Trees.
Structure of a Linked List
A linked list is a linear collection of data elements called nodes that "point" to the next node by means of a pointer.
Each node holds a single element of data and a link or pointer to the next node in the list.
A head node is the first node in the list, a tail node is the last node in the list. Below is a basic representation of a linked list:
[ NODE(head) ] -> [ NODE ] -> [ NODE(tail) ] -> nil
For a more thorough explanation, use these resources:
Assignment
In your language of choice...
You will need two classes:
LinkedList
class, which will represent the full list.Node
class, containing a#value
method and a link to the#next_node
, set both asnil
by default.
Build the following methods in your linked list class:
#append(value)
adds a new node containingvalue
to the end of the list#prepend(value)
adds a new node containingvalue
to the start of the list#size
returns the total number of nodes in the list#head
returns the first node in the list#tail
returns the last node in the list#at(index)
returns the node at the givenindex
#pop
removes the last element from the list#contains?(value)
returns true if the passed in value is in the list and otherwise returns false.#find(value)
returns the index of the node containing value, or nil if not found.#to_s
represent your LinkedList objects as strings, so you can print them out and preview them in the console.The format should be:
( value ) -> ( value ) -> ( value ) -> nil
Extra credit
#insert_at(value, index)
that inserts the node with the providedvalue
at the givenindex
#remove_at(index)
that removes the node at the givenindex
. (You will need to update the links of your nodes in the list when you remove a node.)
Last updated