Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 ·...

23
Recursive Linked Lists Lecture 28 Section 20.5 Robb T. Koether Hampden-Sydney College Mon, Apr 9, 2018 Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 1 / 23

Transcript of Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 ·...

Page 1: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Recursive Linked ListsLecture 28

Section 20.5

Robb T. Koether

Hampden-Sydney College

Mon, Apr 9, 2018

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 1 / 23

Page 2: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 2 / 23

Page 3: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Outline

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 3 / 23

Page 4: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Recursive Linked Lists

A linked list is a naturally recursive structure.The “linked list” is a pointer to a node. (Ignore the m_size datamember.)Furthermore, each node contains a pointer to a node.Therefore, each node contains a “linked list.”However, the sublists do not have an m_size data member, sothey are not exactly LinkedList objects.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 4 / 23

Page 5: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Outline

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 5 / 23

Page 6: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Two-Part Implementation of Recursive MemberFunctions

Recursive Member FunctionsType Class::func(parameters) // Non-recursive func(){

{Do some special things...}{Call the second function,}{passing the head of the list}func(m_head, parameters); // Recursive func(){Do more special things...}return;

}

We implement the recursive functions in two parts.The first function is public and nonrecursive.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 6 / 23

Page 7: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Implementation of Recursive Member Functions

Example (A Typical Recursive Function)ret-type Class::func(LinkedListNode* node, parameters){

if (condition){// Handle the recursive case

return func(node->next, parameters);}else{// Handle the nonrecursive case}return;

}

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 7 / 23

Page 8: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Outline

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 8 / 23

Page 9: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Nonrecursive locateNode() Function

Example (The Nonrecursive locateNode() Function)LinkedListNode<T>* locateNode(int pos) const{

assert(pos >= 0 && pos < m_size);return locateNode(m_head, pos);

}

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 9 / 23

Page 10: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Recursive locateNode() Function

Example (The Recursive locateNode() Function)LinkedListNode<T>* locateNode(LinkedListNode<T>* node,int pos) const{

if (pos == 0)return node;

elsereturn locateNode(node->m_next, pos - 1);

}

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 10 / 23

Page 11: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Outline

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 11 / 23

Page 12: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Example

Example (The insert() Function)There are two things that the nonrecursive insert() functionshould do only once.

Check that pos is valid.Increment m_size.

Then it makes a call to the recursive insert() function, passingit the head pointer.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 12 / 23

Page 13: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Nonrecursive insert() Function

Example (The Nonrecursive insert() Function)void insert(int pos, const T& value){

{Do something special}assert(pos >= 0 && pos <= m_size);{Call the recursive function}insert(m_head, pos, value);{Do something special}m_size++;return;

}

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 13 / 23

Page 14: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Recursive insert() Function

Example (The Recursive insert() Function)The recursive insert() function must distinguish two cases.

Recursive case - The insertion takes place at a later node.Non-recursive case - The insertion takes place at the current node,which is the “head” of the (sub)list.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 14 / 23

Page 15: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Recursive Case

Example (The Recursive Case)The recursive case

Is distinguished by the condition that pos > 0 (action at a laternode).Passes a pointer to the next node.Decrements the value of pos.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 15 / 23

Page 16: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Recursive Case

Example (The Recursive Case)if (pos > 0)

insert(node->m_next, pos - 1, value);...

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 16 / 23

Page 17: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Non-Recursive Case

Example (The Non-Recursive Case)The non-recursive case

Is distinguished by the condition pos == 0 (action at this node).Inserts the new node at the head of the (sub)list.

Because node is modified, it must be passed by reference.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 17 / 23

Page 18: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Non-Recursive Case

Example (The Non-Recursive Case)if (pos == 0){

LinkedListNode<T>* new_node= new LinkedListNode<T>(value);

new_node->m_next = node;node = new_node;

}

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 18 / 23

Page 19: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Recursive insert() Function

Example (Recursive insert() Function)void insert(LinkedListNode<T>*& node, int pos,

const T& value){// Recursive case

if (pos > 1)insert(node->m_next, pos - 1, value);

// Non-recursive caseelse{

LinkedListNode<T>* new_node =new LinkedListNode<T>(value);

new_node->m_next = node;node = new_node;

}return;

}

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 19 / 23

Page 20: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Outline

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 20 / 23

Page 21: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

The Recursive remove() Function

Write a recursive implementation of the remove() function.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 21 / 23

Page 22: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Outline

1 Recursive Linked Lists

2 Recursive Member FunctionsThe locateNode() FunctionThe insert() FunctionThe remove() Function

3 Assignment

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 22 / 23

Page 23: Recursive Linked Listspeople.hsc.edu/faculty-staff/robbk/Coms262/Lectures... · 2018-04-09 · Recursive Linked Lists A linked list is a naturally recursive structure. The “linked

Assignment

AssignmentRead Section 20.5.

Robb T. Koether (Hampden-Sydney College) Recursive Linked Lists Mon, Apr 9, 2018 23 / 23