Study Guide - Linked Lists

Study Guide - Linked Lists

A study guide for simple linked lists in Java.

CSC251 Study Guide

Linked Lists Exam

Index

Linked Lists vs Arrays

  • Arrays
  • can access any element directly via indexing
  • all elements grouped together
  • sitting in 1 block of memory
  • size is fixed
  • Linked Lists
  • each element sits in own block of memory (called node)
  • nodes can only be accessed in sequential order
  • appears limited
  • size varies - nodes allocated on need basis
  • list elements can be easily inserted/removed without reallocation and at any point in the list
  • no random access to data
  • no efficient form of indexing
  • Key Differences
  • underlying layout of data in memory
  • how individual elements are accessed

Linked Lists Properties

  • overview
  • a sequence of elements arranged 1 after another with each element connected to next by a link
  • one of the simplest and most common data structures
  • can be used to implement other abstract data types
  • defintion
  • data structure of group of nodes that represent a sequence
  • diagram
Single Linked List
above is a linked list with nodes that contain 2 fields - an integer value and a link to next to the next node; last node linked to terminator symbol to signify end of list/null link
  • conceptual implementation
  • each node has data and reference (link) to next node in sequence
  • allows for insertion of removal of elements from any position in sequence
  • operations for singly linked list
  • insertion
  • deletion
  • traversal - going through entire sequence until reaching last node
  • advantages
  • dynamic data structure that allocates needed memory
  • easy implementation for insertion and deletion operations
  • other data structures can be easily executed with linked lists
  • reduce access time and can expand without more memory being used
  • disadvantages
  • usually wastes memory with pointers which requires extra storage space
  • nodes must be read sequentially
  • nodes stored in an in-contiguous manner, so more difficult to access individual nodes
  • very difficult to reverse traverse

Linked Lists Algorithms

  • constructor for an integer node in a linked list\

public Int_Node (int initialData, Int_node

initialLink) {\

data = initialData; //integer value\

link = initialLink; //reference to next node in list\

}\

  • define empty linked list\

  • pseudocode representing empty list by storing null in head reference\keeping track of front node by using an Int_Node reference variable called head
  • add new node to empty list\

  • pseudocode
  • create new node for head
  • place data in new node’s data field
  • make head refer to null which is initial head value
  • connect new node to head
  • add node to front of list\

  • pseudocode
  • create new node
  • place data (newData) in new node’s data field
  • connect new node to front of list
  • make original head refer to new head of linked list
Diagram showing how a node is inserted after an existing nodeInserting node before existing node cannot be done directly - instead you have to keep track of the previous node and insert a node after that
  • adding anywhere but front\

previous.link);



while (prev.link != null) {\

prev = head;\

prev = prev.link;\

}\

  • pseudocode set a reference named prev (for previous) to refer to node which is just before new node’s position
  • removing node at head\

  • pseudocode directing head to node right next to it (head.link) so that original head is removed
  • removing node anywhere
Removing node after given node - to find and remove a particular node, you still have to keep track of the previous element
  • traverse through list\

while (pointer != null) {\

pointer = pointer.link;\

}\

  • pseudocode
  • initializing pointer to reference head
  • while loop that keeps going through entire list until pointer (or head) is null\null implying that it’s reached the last node because the last node will always have a null link since there’s nothing next to the last node so no link so null link
  • pointer referenced to next node or pointer.link
  • print list through traversal\

while (pointer != null) {\

System.out.print(pointer.data + " ");\

pointer = pointer.link;\

}\

  • pseudocode\same as traversal algorithm but just printing out data of pointer as you go along the node sequence with pointer.data
No items found.

Subscribe to my newsletter Today

In my newsletter, I share personal and career learnings, advice, collaboration opportunities, and more.