190 likes | 197 Views
Learn to efficiently manage and manipulate linked lists, overcoming their limitations. Understand insertion, deletion, and traversal techniques. Explore doubly linked lists for enhanced functionality.
E N D
Example • We would like to keep a list of inventory records – but only as many as we need • An array is a fixed size • Instead – use a linked list • What are the disadvantages of using a linked list?
Linked List Object Object Object next next next Ø • Node – one element of the linked list • Object – data stored in the node – examples? • next – a reference to the next node in the list • last node points to NULL
Linked List tail Object Object Object head next next next Ø • head keeps track of the head of the list • tail keeps track of the last node in the list • tail not always used
Insertion at Head tail new_node Object1 Object2 head next next Ø Object3 Insert here next
Insertion at Head tail new_node Object1 Object2 head next next Ø Object3 next • Create new_node • store object in new_node • Point new_node next to the node head points to
Insertion at Head tail new_node Object1 Object2 head next next Ø Object3 next • Create new_node • store object in new_node • Point new_node next to the node head points to • Point head to new_node
Insertion at Head tail Object3 Object1 Object2 head next next next Ø • Does this algorithm work for the list below? new_node tail Ø head Object3 next
Insertion at Head • Create new_node • store object in new_node • Point new_node next to the node head points to • Point head to new_node • If tail points to NULL • point tail to new_node
Insertion at Head new_node tail • Create new_node • store object in new_node • Point new_node next to the node head points to • Point head to new_node • If tail points to NULL • point tail to new_node Ø head Object3 next
Insertion at Tail tail Object1 Object2 head next next Ø Object3 Insert here new_node next new_node tail Ø head Object3 next
Find tail 5 12 3 head next next next Ø • find(3) • find(16) - always remember to deal with special cases
Deletion tail Object3 Object1 Object2 head next next next Ø • Deletion of head • Complexity? • Deletion of tail • Complexity?
Insertion/Deletion in Middle tail Object3 Object1 Object2 head next next next Ø • Insert between Object1 and Object2 • Delete Object1
Exercises • Implement a method to recursively count number of nodes in a linked list • Implement a method to reverse a linked list • Implement a method that takes as input two integers representing node positions and swaps the specified nodes
Doubly Linked Lists Object1 Object2 Object3 header prev prev prev trailer next next next • Each node keeps a pointer to the next node and to the previous node • Makes some operations (such as insertion at end) more efficient • Costs? • At the beginning and end of the list are sentinel nodes • Simplify insertion/deletion algorithm
Doubly Linked Lists Object1 Object2 Object3 header prev prev prev trailer next next next • Insertion and deletion at beginning/end • Insertion and deletion in middle header trailer
new_node Doubly Linked Lists Object4 prev insert here next Object1 Object2 Object3 header prev prev prev trailer next next next • Insertion
new_node Doubly Linked Lists Object4 prev insert here next Object1 Object2 Object3 header prev prev prev trailer next next next • Insertion at head • Set next of new_node to point to what header’s next points to • Set prev of node that header’s next points to to point to new_node • Set prev of new_node to point to header • Set header’s next to point to new_node • Number 1 must come before number 4 • Insertion at trailer? • Deletion?