1 / 89

# Linked List: Traversal Insertion Deletion - PowerPoint PPT Presentation

Lecture 9. Linked List: Traversal Insertion Deletion. LB. Linked List Traversal. LB. 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)

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Lecture 9

LB

• Traversal means “visiting” or examining each node.
• Start at the beginning
• Go one node at a time until the end
• Recursive procedure (or function)
• Looks at just one node
• What procedure will look at the rest?
LBThe Node Code

Node definesa record

data isoftype Num

next isoftype Ptr toa Node

endrecord

LBThe Big Picture

42

98

12

6

heap

stack

LBThe 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

LBThe Big Picture

42

98

12

6

heap

stack

LB

### Questions?

Node Definition

node definesa record

data isoftype Num

next isoftype ptr toa node

endrecord

//

48

17

142

The Scenario
• You have a linked list
• Perhaps empty, perhaps not
• Perhaps ordered, perhaps not

Involves two steps:

• Finding the correct location
• Doing the work to add the node
Finding the Correct Location
• Three possible positions:
• The front
• The end
• Somewhere in the middle

93

Inserting to the Front

48

17

142

• There is no work to find the correct location
• Empty or not, head will point to the right location
93

//

Don’t Worry!

Inserting to the End

//

48

17

142

• Find the end of the list(when at NIL)
• Recursion or iteration
93

//

142

Inserting to the Middle

//

17

48

142

• Used when order is important
• Go to the node that should follow the one to add
• Recursion or iteration
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

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

### Inserting at the Front of a Linked List

Inserting to the Front of a Linked List
• Need an in/out pointer parameter
• Create new node
• Fill in data
• Make new node’s next pointer point to current
• Update current to point to new node
42

Current new_data temp

2

R

Animated Insert to Front of Linked List

4

17

2

(current iot in/out ptr toa Node,

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

temp <- new(Node)

temp^.data <- new_data

temp^.next <- current

current <- temp

### Inserting at the End of a Linked List

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 node’s next pointer to point to NIL
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

endif

Inserting at the End of a Linked List

current new_data 53

current new_data 53

current new_data 53

current new_data 53

R

R

R

R

48

17

142

53

### Inserting in Order into a Linked List

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
• Update the next pointer of the new node
• Update current to point to new node
Inserting in Order into a Linked List

procedure Insert_In_Order(current isoftype in/out Ptr toa Node, new_data isoftype in Num )

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

R

R

R

current new_data temp

current new_data temp

current new_data temp

19

19

19

Inserting In Order into a Linked List

13

18

23

19

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)

### Deleting an Element from a Linked List

The Node Definition

Node definesa record

data isoftype num

next isoftype ptr toa Node

endrecord

6

42

The Scenario

• Begin with an existing linked list
• Could be empty or not
• Could be ordered or not

4

17

6

42

The Scenario

• Begin with an existing linked list
• Could be empty or not
• Could be ordered or not

4

17

42The Scenario

• Begin with an existing linked list
• Could be empty or not
• Could be ordered or not

4

17

42The Scenario

• Begin with an existing linked list
• Could be empty or not
• Could be ordered or not

4

17

Finding the Match
• We’ll examine three situations:
• Delete the first element
• Delete the first occurrence of an element
• Delete all occurrences of a particular element
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

• 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.
6

42

4

17

.

.

.

.

6

42

4

17

.

.

.

.

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

endif

endprocedure

Target = 4

6

42

4

17

.

.

.

.

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

endif

endprocedure

Target = 4

6

42

4

17

.

.

.

.

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

endif

endprocedure

Target = 4

6

42

4

17

.

.

.

.

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

endif

endprocedure

Target = 4

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

4

17

.

.

.

.

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

4

17

.

.

.

.

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

4

17

.

.

.

.

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

4

17

.

.

.

.

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

4

17

.

.

.

.

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

4

17

.

.

.

.

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

endif

endprocedure

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

endif

endprocedure

42

Target = 4

Target = 4

17

.

.

.

.

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

endif

endprocedure

42

Target = 4

17

.

.

.

.

6

42

17

.

.

.

.

Deleting All Occurrences
• Deleting all occurrences is a little more difficult.
• Traverse the entire list and don’t stop until you reach nil.
• If you delete, recurse on current
• If you don’t delete, recurse on current^.next
6

4

4

17

.

.

.

.

6

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

endif

endprocedure

4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

4

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

Target = 4

4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

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

endif

endprocedure

Target = 4

Target = 4

17

.

.

.

.

6

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

endif

endprocedure

Target = 4

17

.

.

.

.

6

17

.

.

.

.

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