1 / 89

Linked List: Traversal Insertion Deletion

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)

tonysilva
Télécharger la présentation

Linked List: Traversal Insertion Deletion

An Image/Link below is provided (as is) to download presentation 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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 9 Linked List: Traversal InsertionDeletion

  2. LB Linked List Traversal

  3. 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?

  4. LB The Node Code Node definesa record data isoftype Num next isoftype Ptr toa Node endrecord

  5. LB The Big Picture 42 98 12 6 heap stack head

  6. LB The Little Picture 12

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

  8. LB The Big Picture 42 98 12 6 heap stack head

  9. LB Questions?

  10. Insertion Into Linked Lists

  11. Node Definition node definesa record data isoftype Num next isoftype ptr toa node endrecord

  12. // head 48 17 142 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

  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 93 Inserting to the Front 48 17 142 head • There is no work to find the correct location • Empty or not, head will point to the right location

  16. 93 // Don’t Worry! Inserting to the End // head 48 17 142 • Find the end of the list(when at NIL) • Recursion or iteration

  17. 93 // 142 Inserting to the Middle // head 17 48 142 • Used when order is important • Go to the node that should follow the one to add • Recursion or iteration

  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 node’s next pointer point to current • Update current to point to new node

  22. 42 Current new_data temp 2 R Animated Insert to Front of Linked List head 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

  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 node’s 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. 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 head 48 17 142 53

  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. 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 Head 13 18 23 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. 6 42 The Scenario head • Begin with an existing linked list • Could be empty or not • Could be ordered or not 4 17

  36. 6 42 The Scenario head • Begin with an existing linked list • Could be empty or not • Could be ordered or not 4 17

  37. 42 The Scenario head • Begin with an existing linked list • Could be empty or not • Could be ordered or not 4 17

  38. 42 The Scenario head • Begin with an existing linked list • Could be empty or not • Could be ordered or not 4 17

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

  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. 6 42 head 4 17 . . Delete(head, 4) . .

  43. 6 42 head 4 17 . . Delete(head, 4) . . procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endif endprocedure Target = 4

  44. 6 42 head 4 17 . . Delete(head, 4) . . procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endif endprocedure Target = 4

  45. 6 42 head 4 17 . . Delete(head, 4) . . procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endif endprocedure Target = 4

  46. 6 42 head 4 17 . . Delete(head, 4) . . procedure Delete(cur iot in/out ptr toa Node, target isoftype in num) // Delete single occurrence of a node. if(cur <> NIL) then if(cur^.data = target) then cur <- cur^.next else Delete(cur^.next, target) endif endif endprocedure Target = 4

  47. 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 head 4 17 . . Delete(head, 4) . .

  48. 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 head 4 17 . . Delete(head, 4) . .

  49. 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 head 4 17 . . Delete(head, 4) . .

  50. 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 head 4 17 . . Delete(head, 4) . .

More Related