Download presentation
Presentation is loading. Please wait.
Published byTamia Billington Modified over 10 years ago
1
Linked List: Traversal Insertion Deletion
2
Linked List Traversal LB
3
Linked List Traversal 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? LB
4
The Node Code Node definesa record data isoftype Num next isoftype Ptr toa Node endrecord LB
5
The Big Picture 42 heap stack head 98126 LB
6
The Little Picture 12 LB
7
The Classic Code 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 <> NIL) then print(current^.data) Traverse(current^.next) endif endprocedure // Traverse LB
8
The Big Picture 42 heap stack head 98126 LB
9
Questions? LB
10
Insertion Into Linked Lists
11
Node Definition node definesa record data isoftype Num next isoftype ptr toa node endrecord
12
The Scenario You have a linked list –Perhaps empty, perhaps not –Perhaps ordered, perhaps not You want to add an element into the linked list 4817142 head //
13
Adding an Element to a Linked List Involves two steps: Finding the correct location Doing the work to add the node
14
Finding the Correct Location Three possible positions: –The front –The end –Somewhere in the middle
15
head Inserting to the Front There is no work to find the correct location Empty or not, head will point to the right location 4817142 head 93
16
Inserting to the End Find the end of the list (when at NIL) –Recursion or iteration 4817142 head // 93 // Dont Worry!
17
Inserting to the Middle Used when order is important Go to the node that should follow the one to add –Recursion or iteration 1748142 head // 93 // 142
18
The 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 <- new(Node) temp^.data <- new_data temp^.next <- current current <- temp
19
Three 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
20
Inserting at the Front of a Linked List
21
Inserting 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
22
procedure Insert (current iot in/out ptr toa Node, new_data isoftype in Num) temp isoftype ptr toa Node temp <- new(Node) temp^.data <- new_data temp^.next <- current current <- temp endprocedure 4 17 head 42 Current new_data temp 2 R 2 Animated Insert to Front of Linked List (current iot in/out ptr toa Node, temp <- new(Node) temp^.data <- new_data temp^.next <- current current <- temp
23
Inserting at the End of a Linked List
24
Inserting 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
25
Inserting 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 <- new( Node ) current^.data <- new_data current^.next <- NIL else Add_To_End( current^.next, new_data) endif endprocedure //Add_To_End
26
4817142 head 53 current new_data 53 R R R R Inserting at the End of a Linked List
27
Inserting in Order into a Linked List
28
Inserting 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
29
Inserting 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 > new_data)) then temp <- new( Node ) temp^.data <- new_data temp^.next <- current current <- temp else Insert_In_Order(current^.next,new_data) endif endprocedure //Insert_In_Order
30
131823 Head Inserting In Order into a Linked List 19 current new_data temp R 19 current new_data temp R 19 current new_data temp R 19
31
Summary 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)
32
Questions?
33
Deleting an Element from a Linked List
34
The Node Definition Node definesa record data isoftype num next isoftype ptr toa Node endrecord
35
The Scenario Begin with an existing linked list –Could be empty or not –Could be ordered or not 417 head 42 6
36
The Scenario Begin with an existing linked list –Could be empty or not –Could be ordered or not 417 head 42 6
37
The Scenario Begin with an existing linked list –Could be empty or not –Could be ordered or not 417 head 42
38
The Scenario Begin with an existing linked list –Could be empty or not –Could be ordered or not 417 head 42
39
Finding the Match Well examine three situations: –Delete the first element –Delete the first occurrence of an element –Delete all occurrences of a particular element
40
Deleting 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 <> nil) then current <- current^.next endif endprocedure
41
Deleting 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 <- current^.next –This removes the element, since nothing will point to the node.
42
417 head 42 6. Delete(head, 4).
43
Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure 417 head 42 6 Target = 4
44
. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure 417 head 42 6 Target = 4
45
. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure 417 head 42 6 Target = 4
46
. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure 417 head 42 6 Target = 4
47
. Delete(head, 4). 417 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
48
. Delete(head, 4). 417 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
49
. Delete(head, 4). 417 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
50
. Delete(head, 4). 417 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
51
. Delete(head, 4). 417 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
52
. Delete(head, 4). 417 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
53
. Delete(head, 4). 17 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
54
. Delete(head, 4). 17 head 42 6 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endprocedure Target = 4
55
. Delete(head, 4). 17 head 42 6
56
Linked List Deletion (All Occurrences)
57
Deleting 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
58
417 head 4 6. Delete(head, 4).
59
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
60
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
61
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
62
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
63
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
64
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
65
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
66
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
67
417 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
68
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
69
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
70
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
71
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
72
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
73
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
74
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
75
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
76
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
77
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
78
17 head 4 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
79
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
80
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
81
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
82
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
83
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
84
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4 procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
85
17 head 6. Delete(head, 4). procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete all occurrences of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next Delete(cur, target) else Delete(cur^.next, target) endif endprocedure Target = 4
86
17 head 6. Delete(head, 4).
87
Summary 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
88
Questions?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.