In: Computer Science
Could you please write "linkedlist.cpp" using recursive approach to manage a linked list for the given files below as well as an updated makefile.
// app.cpp
#include <iostream>
#include "linkedlist.h"
using namespace std;
void find(LinkedList& list, char ch)
{
if (list.find(ch))
cout << "found ";
else
cout << "did not find ";
cout << ch << endl;
}
int main()
{
LinkedList list;
list.add('x');
list.add('y');
list.add('z');
cout << list;
find(list, 'y');
list.del('y');
cout << list;
find(list, 'y');
list.del('x');
cout << list;
find(list, 'y');
list.del('z');
cout << list;
find(list, 'y');
return 0;
}
//-------------------
//linkedlist.h
#ifndef _LINKED_LIST_
#define _LINKED_LIST_
#include <ostream>
class LinkedList
{
public:
LinkedList();
~LinkedList();
void add(char ch);
bool find(char ch);
bool del(char ch);
friend std::ostream& operator<<(std::ostream& out,
LinkedList& list);
};
#endif // _LINKED_LIST_
//-------------------------
//makefile
CC = g++
CPPFLAGS = -Wall -g -std=c++11
app: app.o linkedlist.o
app.o: linkedlist.h
linkedlist.o: linkedlist.h
.PHONY: clean
clean: # clean the directory
$(info -- cleaning the directory --)
rm -f *.o
rm -f app
//-----------------------
// Recursive CPP program to recursively insert
// a node and recursively print the list.
#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
Node*
next;
};
// Allocates a new node with given data
Node *newNode(
int
data)
{
Node *new_node
=
new
Node;
new_node->data =
data;
new_node->next =
NULL;
return
new_node;
}
// Function to insert a new node at the
// end of linked list using recursion.
Node* insertEnd(Node* head,
int
data)
{
// If linked list is
empty, create a
// new node (Assuming
newNode() allocates
// a new node with
given data)
if
(head
== NULL)
return
newNode(data);
// If we have not
reached end, keep traversing
//
recursively.
else
head->next
= insertEnd(head->next, data);
return
head;
}
void
traverse(Node* head)
{
if
(head
== NULL)
return
;
// If head is not
NULL, print current node
// and recur for
remaining list
cout <<
head->data <<
" "
;
traverse(head->next);
}
// Driver code
int
main()
{
Node* head =
NULL;
head =
insertEnd(head, 6);
head =
insertEnd(head, 8);
head =
insertEnd(head, 10);
head =
insertEnd(head, 12);
head =
insertEnd(head, 14);
traverse(head);
}