Title: Linked List: Traversal Insertion Deletion
1 Linked List Traversal InsertionDeletion
Lecture 9
2Linked List Traversal
LB
3Linked List Traversal
LB
- Traversal means visiting or examining each
node. - Simple linked list
- Start at the beginning
- Go one node at a time until the end
- Recursive procedure (or function)
- Given a head pointer
- Looks at just one node
- What procedure will look at the rest?
4The Node Code
LB
- Node definesa record
- data isoftype Num
- next isoftype Ptr toa Node
- endrecord
5The Big Picture
LB
42
98
12
6
heap
stack
head
6The Little Picture
LB
12
7The Classic Code
LB
- Procedure Traverse
- (current isoftype in Ptr toa Node)
- // Precon Pass in pointer to a list
- // Purpose Print each data item
- // Postcon No changes to list
- if(current ltgt NIL) then
- print(current.data)
- Traverse(current.next)
- endif
- endprocedure // Traverse
8The Big Picture
LB
42
98
12
6
heap
stack
head
9Questions?
LB
10Insertion Into Linked Lists
11Node Definition
- node definesa record
- data isoftype Num
- next isoftype ptr toa node
- endrecord
12The Scenario
- You have a linked list
- Perhaps empty, perhaps not
- Perhaps ordered, perhaps not
- You want to add an element into the linked list
13Adding an Element to a Linked List
- Involves two steps
- Finding the correct location
- Doing the work to add the node
14Finding the Correct Location
- Three possible positions
- The front
- The end
- Somewhere in the middle
15Inserting to the Front
48
17
142
head
- There is no work to find the correct location
- Empty or not, head will point to the right
location
16Inserting to the End
//
head
48
17
142
- Find the end of the list(when at NIL)
- Recursion or iteration
17Inserting to the Middle
//
head
17
48
142
- Used when order is important
- Go to the node that should follow the one to add
- Recursion or iteration
18The Work to Add the Node
- Create the new node
- Fill in the data field
- Deal with the next field
- Point to nil (if inserting to end)
- Point to current (front or middle)
- temp lt- new(Node)
- temp.data lt- new_data
- temp.next lt- current
- current lt- temp
19Three Types of Insertion
- To front
- No recursion needed
- To end
- Get to the end, then add node
- In order (in middle)
- To maintain sorted property
20Inserting at the Front of a Linked List
21Inserting to the Front of a Linked List
- Need an in/out pointer parameter
- Create new node
- Fill in data
- Make new nodes next pointer point to current
- Update current to point to new node
22Animated Insert to Front of Linked List
head
4
17
2
procedure Insert (current iot in/out ptr toa
Node, new_data isoftype in Num) temp
isoftype ptr toa Node temp lt- new(Node)
temp.data lt- new_data temp.next lt- current
current lt- temp endprocedure
(current iot in/out ptr toa Node,
temp lt- new(Node)
temp.data lt- new_data
temp.next lt- current
current lt- temp
23Inserting at the End of a Linked List
24Inserting to End of a Linked List
- Recursively traverse the list until at end
- Then
- Create new node at current
- Fill in data
- Terminate the new nodes next pointer to point
to NIL
25Inserting to the End of a Linked List
- procedure Add_To_End( current isoftype in/out Ptr
toa Node, new_data isoftype in Num ) - // Purpose Add new node to end of list
- // Pre current points to NIL-terminated list
- // Post new list has added element at end
- if( current NIL ) then
- current lt- new( Node )
- current.data lt- new_data
- current.next lt- NIL
- else
- Add_To_End( current.next, new_data)
- endif
- endprocedure //Add_To_End
26Inserting at the End of a Linked List
head
48
17
142
53
27Inserting in Order into a Linked List
28Inserting In Order into a Linked List
- Recursively traverse until you find the correct
place to insert - Compare to see if you need to insert before
current - If adding largest value, then insert at the end
- Perform the commands to do the insertion
- Create new node
- Add data
- Update the next pointer of the new node
- Update current to point to new node
29Inserting in Order into a Linked List
- procedure Insert_In_Order(current isoftype in/out
Ptr toa Node, new_data isoftype in Num ) - // comments here
- temp isoftype Ptr toa Node
- if ((current NIL) OR
- (current.data gt new_data)) then
- temp lt- new( Node )
- temp.data lt- new_data
- temp.next lt- current
- current lt- temp
- else
- Insert_In_Order(current.next,new_data)
- endif
- endprocedure //Insert_In_Order
30Inserting In Order into a Linked List
Head
13
18
23
19
31Summary
- Inserting into a linked list involves two steps
- Find the correct location
- Do the work to insert the new value
- We can insert into any position
- Front
- End
- Somewhere in the middle(to preserve order)
32Questions?
33Deleting an Element from a Linked List
34The Node Definition
- Node definesa record
- data isoftype num
- next isoftype ptr toa Node
- endrecord
35The Scenario
head
4
17
- Begin with an existing linked list
- Could be empty or not
- Could be ordered or not
36The Scenario
head
4
17
- Begin with an existing linked list
- Could be empty or not
- Could be ordered or not
37The Scenario
head
4
17
- Begin with an existing linked list
- Could be empty or not
- Could be ordered or not
38The Scenario
head
4
17
- Begin with an existing linked list
- Could be empty or not
- Could be ordered or not
39Finding the Match
- Well examine three situations
- Delete the first element
- Delete the first occurrence of an element
- Delete all occurrences of a particular element
40Deleting the First Element
- This can be done without any traversal/searching
- Requires an in/out pointer
- procedure DeleteFront(current iot in/out ptr toa
Node) - // deletes the first node in the list
- if (current ltgt nil) then
- current lt- current.next
- endif
- endprocedure
41Deleting from a Linked List
- Deletion from a linked list involves two steps
- Find a match to the element to be
deleted(traverse until nil or found) - Perform the action to delete
- Performing the deletion is trivial
- current lt- current.next
- This removes the element, since nothing will
point to the node.
42head
4
17
. . Delete(head, 4) . .
43head
4
17
. . Delete(head, 4) . .
procedure Delete(cur iot in/out ptr toa Node,
target isoftype in num) // Delete single
occurrence of a node. if(cur ltgt NIL) then
if(cur.data target) then cur lt- cur.next
else Delete(cur.next, target) endif
endif endprocedure
Target 4
44head
4
17
. . Delete(head, 4) . .
procedure Delete(cur iot in/out ptr toa Node,
target isoftype in num) // Delete single
occurrence of a node. if(cur ltgt NIL) then
if(cur.data target) then cur lt- cur.next
else Delete(cur.next, target) endif
endif endprocedure
Target 4
45head
4
17
. . Delete(head, 4) . .
procedure Delete(cur iot in/out ptr toa Node,
target isoftype in num) // Delete single
occurrence of a node. if(cur ltgt NIL) then
if(cur.data target) then cur lt- cur.next
else Delete(cur.next, target) endif
endif endprocedure
Target 4
46head
4
17
. . Delete(head, 4) . .
procedure Delete(cur iot in/out ptr toa Node,
target isoftype in num) // Delete single
occurrence of a node. if(cur ltgt NIL) then
if(cur.data target) then cur lt- cur.next
else Delete(cur.next, target) endif
endif endprocedure
Target 4
47head
4
17
. . Delete(head, 4) . .
48head
4
17
. . Delete(head, 4) . .
49head
4
17
. . Delete(head, 4) . .
50head
4
17
. . Delete(head, 4) . .
51head
4
17
. . Delete(head, 4) . .
52head
4
17
. . Delete(head, 4) . .
53head
17
. . Delete(head, 4) . .
54head
17
. . Delete(head, 4) . .
55head
17
. . Delete(head, 4) . .
56Linked List Deletion(All Occurrences)
57Deleting All Occurrences
- Deleting all occurrences is a little more
difficult. - Traverse the entire list and dont stop until you
reach nil. - If you delete, recurse on current
- If you dont delete, recurse on current.next
58head
4
17
. . Delete(head, 4) . .
59head
4
17
. . Delete(head, 4) . .
60head
4
17
. . Delete(head, 4) . .
61head
4
17
. . Delete(head, 4) . .
62head
4
17
. . Delete(head, 4) . .
63head
4
17
. . Delete(head, 4) . .
64head
4
17
. . Delete(head, 4) . .
65head
4
17
. . Delete(head, 4) . .
66head
4
17
. . Delete(head, 4) . .
67head
4
17
. . Delete(head, 4) . .
68head
17
. . Delete(head, 4) . .
69head
17
. . Delete(head, 4) . .
70head
17
. . Delete(head, 4) . .
71head
17
. . Delete(head, 4) . .
72head
17
. . Delete(head, 4) . .
73head
17
. . Delete(head, 4) . .
74head
17
. . Delete(head, 4) . .
75head
17
. . Delete(head, 4) . .
76head
17
. . Delete(head, 4) . .
77head
4
17
. . Delete(head, 4) . .
78head
4
17
. . Delete(head, 4) . .
79head
17
. . Delete(head, 4) . .
80head
17
. . Delete(head, 4) . .
81head
17
. . Delete(head, 4) . .
82head
17
. . Delete(head, 4) . .
83head
17
. . Delete(head, 4) . .
84head
17
. . Delete(head, 4) . .
85head
17
. . Delete(head, 4) . .
86head
17
. . Delete(head, 4) . .
87Summary
- Deletion involves
- Getting to the correct position
- Moving a pointer so nothing points to the element
to be deleted - Can delete from any location
- Front
- First occurrence
- All occurrences
88Questions?
89(No Transcript)