Linked List: Traversal Insertion Deletion. Linked List Traversal LB.

Post on 30-Mar-2015

294 views 5 download

Tags:

Transcript of Linked List: Traversal Insertion Deletion. Linked List Traversal LB.

Linked List: Traversal InsertionDeletion

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)– Given a head pointer– Looks at just one node– What procedure will look at the rest?

LB

The Node Code

Node definesa record

data isoftype Num

next isoftype Ptr toa Node

endrecord

LB

The Big Picture

42

heap

stackhead

98 12 6

LB

The Little Picture

12

LB

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

The Big Picture

42

heap

stackhead

98 12 6

LB

Questions?

LB

Insertion Into Linked Lists

Node Definition

node definesa record

data isoftype Num

next isoftype ptr toa node

endrecord

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

48 17 142head //

Adding an Element to a Linked List

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

head

Inserting to the Front

• There is no work to find the correct location

• Empty or not, head will point to the right location

48 17 142head 93

Inserting to the End

• Find the end of the list(when at NIL)

– Recursion or iteration

48 17 142head //93 //

Don’t Worry!

Inserting to the Middle

• Used when order is important

• Go to the node that should follow the one to add

– Recursion or iteration

17 48 142head //93 //142

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

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 <- tempendprocedure

4 17

head

42

Current new_data temp2R

2

Animated Insert to Front of Linked List

(current iot in/out ptr toa Node,

temp <- new(Node)temp^.data <- new_datatemp^.next <- currentcurrent <- 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

Add_To_End( current^.next, new_data)

endif

endprocedure //Add_To_End

48 17 142head 53

current new_data 53R

current new_data 53R

current new_data 53R

current new_data 53R

Inserting at the End of a Linked List

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– Add data– 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 )

// 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) endifendprocedure //Insert_In_Order

13 18 23Head

Inserting In Order into a Linked List

19

current new_data tempR 19

current new_data tempR 19

current new_data tempR 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)

Questions?

Deleting an Element from a Linked List

The Node Definition

Node definesa record

data isoftype num

next isoftype ptr toa Node

endrecord

The Scenario

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

4 17

head

426

The Scenario

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

4 17

head

426

The Scenario

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

4 17

head

42

The Scenario

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

4 17

head

42

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 endifendprocedure

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.

4 17

head

426

.

.Delete(head, 4)..

.

.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 endifendprocedure

4 17

head

426

Target = 4

.

.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 endifendprocedure

4 17

head

426

Target = 4

.

.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 endifendprocedure

4 17

head

426

Target = 4

.

.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 endifendprocedure

4 17

head

426

Target = 4

.

.Delete(head, 4)..

4 17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

4 17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

4 17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

4 17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

4 17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

4 17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

17

head

426

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 endifendprocedure

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

17

head

426

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 endifendprocedure

Target = 4

.

.Delete(head, 4)..

17

head

426

Linked List Deletion(All Occurrences)

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

4 17

head

46

.

.Delete(head, 4)..

4 17

head

46

.

.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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

4 17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

17

head

46

.

.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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

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 endifendprocedure

Target = 4

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 endifendprocedure

Target = 4

17

head

6

.

.Delete(head, 4)..

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

Questions?