190 likes | 206 Views
Linked Lists. 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_ptr. next_ptr. next_ptr. Ø.
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_ptr next_ptr next_ptr Ø • Node – one element of the linked list • Object – data stored in the node – examples? • next_ptr – a pointer to the next node in the list • last node points to NULL
Linked List tail Object Object Object head next_ptr next_ptr next_ptr Ø • 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_ptr next_ptr Ø Object3 Insert here next_ptr
Insertion at Head tail new_node Object1 Object2 head next_ptr next_ptr Ø Object3 next_ptr • Create new_node • store object in new_node • Point new_node next_ptr to the node head points to
Insertion at Head tail new_node Object1 Object2 head next_ptr next_ptr Ø Object3 next_ptr • Create new_node • store object in new_node • Point new_node next_ptr to the node head points to • Point head to new_node
Insertion at Head tail Object3 Object1 Object2 head next_ptr next_ptr next_ptr Ø • Does this algorithm work for the list below? new_node tail Ø head Object3 next_ptr
Insertion at Head • Create new_node • store object in new_node • Point new_node next_ptr 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_ptr to the node head points to • Point head to new_node • If tail points to NULL • point tail to new_node Ø head Object3 next_ptr
Insertion at Tail tail Object1 Object2 head next_ptr next_ptr Ø Object3 Insert here new_node next_ptr new_node tail Ø head Object3 next_ptr
Find tail 5 12 3 head next_ptr next_ptr next_ptr Ø • find(3) • find(16) - always remember to deal with special cases
Deletion tail Object3 Object1 Object2 head next_ptr next_ptr next_ptr Ø • Deletion of head • Complexity? • Deletion of tail • Complexity?
Insertion/Deletion in Middle tail Object3 Object1 Object2 head next_ptr next_ptr next_ptr Ø • Insert between Object1 and Object2 • Delete Object1
Exercises • Recursively count number of nodes • Reverse list • Swap two nodes
Doubly Linked Lists Object1 Object2 Object3 header prev_ptr prev_ptr prev_ptr trailer next_ptr next_ptr next_ptr • 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_ptr prev_ptr prev_ptr trailer next_ptr next_ptr next_ptr • Insertion and deletion at beginning/end • Insertion and deletion in middle header trailer
new_node Doubly Linked Lists Object4 prev_ptr insert here next_ptr Object1 Object2 Object3 header prev_ptr prev_ptr prev_ptr trailer next_ptr next_ptr next_ptr • Insertion
new_node Doubly Linked Lists Object4 prev_ptr insert here next_ptr Object1 Object2 Object3 header prev_ptr prev_ptr prev_ptr trailer next_ptr next_ptr next_ptr • Insertion at head • Set next_ptr of new_node to point to what header’s next_ptr points to • Set prev_ptr of node that header’s next_ptr points to to point to new_node • Set prev_ptr of new_node to point to header • Set header’s next_ptr to point to new_node • Number 1 must come before number 4 • Insertion at trailer? • Deletion?