1 Linked Lists (continued (continued)) Lecture 5 (maybe) Copying and sorting singly linked lists Lists with head and last nodes Doubly linked lists Append/Circular Lists/Green Coding ADS2 Lecture 5
Sorting a singly linked list nullhead Two options (of some) - keep it sorted (insert in order) - we could use a bubble sort with 2 cursors
Singly linked lists with head and last/tail nodes 3 Makes insertion from end easier Sounds like a great idea … Baltimore head Rome Seattle Toronto last ADS2 Lecture 5
Adding a new node at the “last/tail” 4 Add node containing the string “Zurich” to tail of list head Rome Seattle Toronto last Zurich create new node containing (reference to) string “Zurich”, with next =null head Rome Seattle Toronto last Zurich Redirect last.next to new node head Rome Seattle Toronto last Zurich Reallocate last to new node ADS2 Lecture 5
Adding a new node at the “last/tail” Psuedo code snippet Node node = new Node(e,null) tail.setNext(node) tail = node size++
Singly linked lists with head and last/tail nodes 6 Makes insertion from end easier Sounds like a great idea … Baltimore head Rome Seattle Toronto last ADS2 Lecture 5 But what happens if we delete the last node
Doubly linked lists 7 Removing an element from the tail of a singly linked list is not easy Whether we have just a head, or a head and a last node, need to always traverse the whole list to remove the end. Why? In general it is hard to remove any node other than the head We don’t have a quick way of working out which is the node in front of the one we want to remove. For applications where we want quick access to the predecessor node of any node, we use a doubly linked list. A list in which we can go in both directions. ADS2 Lecture 5
8 Doubly Linked Lists (Goodrich § 3.3) A doubly linked list is a concrete data structure consisting of a sequence of nodes Each node stores –element –link to the next node –link to previous node ADS2 Lecture 5 next elem node prev AB C first last
9 ADS2 Lecture 5 DNode
10 ADS2 Lecture 5 DNode
11 ADS2 Lecture 5 DNode
12 ADS2 Lecture 5 DNode
13 ADS2 Lecture 5 DNode
14 ADS2 Lecture 5 DNode
15 ADS2 Lecture 5 DNode
16 ADS2 Lecture 5 DList
17 ADS2 Lecture 5 DList
18 ADS2 Lecture 5 DList
19 ADS2 Lecture 5 DList
20 ADS2 Lecture 5 DList
21 ADS2 Lecture 5 DList
22 ADS2 Lecture 5 DList
iteration refresher
Iteration
Declare loop variable and initialise
Iteration Continuing condition
Iteration Action at end of loop on each iteration
Iteration
Declare loop variable and initialise
Iteration Continuing condition
Iteration Action at end of loop on each iteration
Iteration
Declare loop variable and initialise
Iteration Continuing condition
Iteration Action at end of loop on each iteration
36 ADS2 Lecture 5 DList This is an example of really tight coding Could we make it tighter? (maybe remove found?) Any comments?
37 ADS2 Lecture 5 DList As tight as it gets?
end of iteration refresher
39 ADS2 Lecture 5 Insertion into the middle of a doubly linked list insert here node d node a node b node c node anode d node b node c make node d’s prev link point to node a make node d’s next link point to node b make node b’s prev link point to node d make node a’s next link point to node d
DList insert
NOTE: case analysis. This can make coding a bit less complicated
DList insert
A1B3 C2 first A0
DList insert A1B3 C2 first A0
DList insert A1B3 C2 first A0
DList insert A1B3 C2 first A0
DList insert A1B3 C2 first A0
DList insert
A1B3 C2 first last D4
DList insert A1B3 C2 first last D4
DList insert A1B3 C2 first last D4
DList insert A1B3 C2 first last D4
DList insert A1B3 C2 first last D4
DList insert
Find insertion point
DList insert Insert new node
DList insert Insert new node
DList insert A1B3 C2 first B0 x y z
DList insert A1B3 C2 first B0 x y z
DList insert A1B3 C2 first B0 x y z
DList insert A1B3 C2 first B0 x y z
DList insert A1B3 C2 first B0 x y z
DList insert Done!
Irrelevant fact … my 1 st passport was paid for by Burroughs Machines Corporation. It came with an indefinite US visa and had as my “Profession” … Passports no longer have “Profession” Random Fact #1 Computer Programmer
Irrelevant fact … my 1 st passport was paid for by Burroughs Machines Corporation. It came with an indefinite US visa and had as my “Profession” … Passports no longer have “Profession” Random Fact #1 Still Learning!!!!
Random Fact #2 What computers looked like when I was a young man working at Burroughs
The dark side of Burroughs (William S.) Random Fact #3
Random Fact #4
end of random facts #1 to #4
ADS2 Lecture 575 Removal from the middle of a doubly linked list node anode d node b node c remove this node make node a’s next link point to node d.next make node b’s prev link point to node d.prev node a node b node c
DList delete But again, do you see the case analysis?
DList delete
Private … only used here, not by user
DList delete
node A head last
DList delete garbage A head last
DList delete node AB C first last
DList delete node AB C first last
DList delete node AB C first last
DList delete garbage AB C first last
DList delete node AB C first last
DList delete node AB C first last
DList delete node AB C first last
DList delete garbage AB C first last
DList delete node AB C first last
DList delete node AB C first last
DList delete node AB C first last
DList delete garbage AB C first last
DList Test
Generic linked lists ADS2 Lecture 597 Rather than use a linked list that can only store objects of a certain type, can use a generic linked list (either generic singly linked list or generic doubly linked list). Need a generic node to implement the list
ADS2 Lecture 598 Java code for a node of a generic singly linked list: GList.java
ADS2 Lecture 599 Java code for a node of a generic singly linked list: GList.java
ADS2 Lecture 5100 Java code for a node of a generic singly linked list: GList.java
ADS2 Lecture 5101 Java code for a node of a generic singly linked list: GList.java
ADS2 Lecture 5102 Java code for a node of a generic singly linked list: GList.java
ADS2 Lecture 5103 Java code for a node of a generic singly linked list: GList.java
ADS2 Lecture 5106
Comparing: array, linked list, doubly linked list insert an item in order delete an item get the ith item
“green” coding? When we delete an element of the list it becomes garbage. Could we recycle deleted nodes?
ADS2 Lecture 5112