review linked list insertion description deletion description basic node implementation conclusion 1

Post on 20-Jan-2018

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

ReviewLinked ListInsertion DescriptionDeletion DescriptionBasic Node ImplementationConclusion

1

Linked List TraversalInserting into a linked list involves

two steps:Find the correct locationDo the work to insert the new value

We can insert into any positionFrontEndSomewhere in the middle(to preserve order)

2

Linked List TraversalTraversal means “visiting” or

examining each node.Simple linked list

Start at the beginningGo one node at a time until the end

Recursive procedure (or function)Given a head pointerLooks at just one nodeWhat procedure will look at the rest?

3

The Node Code

Node definesa recorddata isoftype Numnext isoftype Ptr toa Node

endrecord

4

The Big Picture

42

heap

stackhead

98 12 6

LB

5

The Little Picture

12

6

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 listif(current <> NIL) then

print(current^.data)Traverse(current^.next)

endifendprocedure // Traverse

7

The Big Picture

42

heap

stackhead

98 12 6

8

9

Insertion Into Linked Lists

Node Definition

node definesa record data isoftype Num next isoftype ptr toa nodeendrecord

10

The ScenarioYou have a linked list

Perhaps empty, perhaps notPerhaps ordered, perhaps not

You want to add an element into the linked list

48 17 142head //

11

Adding an Element to a Linked ListInvolves two steps:

Finding the correct location

Doing the work to add the node

12

Finding the Correct LocationThree possible positions:

The frontThe endSomewhere in the middle

13

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

14

Inserting to the End

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

48 17 142head //93 //

Don’t Worry!15

Inserting to the Middle

Used when order is importantGo to the node that should follow the one to addRecursion or iteration

17 48 142head //93 //142

16

The Work to Add the Node

Create the new nodeFill in the data fieldDeal 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

17

Three Types of InsertionTo front

No recursion neededTo end

Get to the end, then add nodeIn order (in middle)

To maintain sorted property

18

19

Inserting at the Front of a Linked List

Inserting to the Front of a Linked ListNeed an in/out pointer parameter

Create new nodeFill in dataMake new node’s next pointer point

to currentUpdate current to point to new node

20

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

21

22

Inserting at the End of a Linked List

Inserting to End of a Linked ListRecursively traverse the list until at

endThen:

Create new node at currentFill in dataTerminate the new node’s next pointer to point to NIL

23

Inserting to the End of a Linked Listprocedure 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) endifendprocedure //Add_To_End

24

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

25

Inserting in Order into a Linked List

Inserting In Order into a Linked ListRecursively traverse until you find the

correct place to insertCompare to see if you need to insert

before currentIf adding largest value, then insert at

the endPerform the commands to do the

insertionCreate new nodeAdd dataUpdate the next pointer of the new

nodeUpdate current to point to new node

27

Inserting in Order into a Linked Listprocedure 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

28

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

29

SummaryInserting into a linked list involves

two steps:Find the correct locationDo the work to insert the new value

We can insert into any positionFrontEndSomewhere in the middle

30

top related