How To Output Characters Using Linked Lists?

#include <iostream>
using namespace std;

class FloatList
{
  private:
      // Declare a structure for the list
      struct ListNode
       {
           float value;
           struct ListNode *next;
       }; 
      ListNode *head;   // List head pointer
    
  public:
      FloatList();  // Constructor
      void appendNode(float num);
};

FloatList::FloatList()  
 { 
    head = NULL; 
 }

void FloatList::appendNode(float num)
{
    ListNode *newNode, *nodePtr;
    // Allocate a new node & store num
    newNode = new ListNode;
    newNode->value = num;
    newNode->next = NULL;
  
    // If there are no nodes in the list
    // make newNode the first node
    if (!head)
        head = newNode;
    else    // Otherwise, insert newNode at end
    {
        // Initialize nodePtr to head of list
        nodePtr = head;
        // Find the last node in the list
        while (nodePtr->next)
            nodePtr = nodePtr->next; 
        // Insert newNode as the last node
        nodePtr->next = newNode;
    } cout << num << " has been APPENDED!" << endl;
}


int main()
{
    FloatList list;

    list.appendNode(2.5);
    list.appendNode(7.9);
    list.appendNode(12.6);
}

INSTRUCTIONS : Convert the above Linked List ADT with Append Operation into a Linked List Template for it to be capable of handling data of different data types. Once your program is complete, change your main program to the following:

int main()
 {
     FloatList list;

     list.appendNode('a');
     list.appendNode('b');
     list.appendNode('c');
   cout <<  "Successful Append!" << endl;
 }

I am able to print the floats (2.5) (7.9) and (12.6), but I cannot edit the program to be able to print ‘a’, ‘b’, and ‘c’

This is the expected output:

a has been APPENDED!
b has been APPENDED!
c has been APPENDED!
Successful Append!

Answer

If you wanted to make it work for string types, or char types, you would have to turn your linked list into templated class. Look at your definition of node:

struct ListNode
       {
           float value;
           struct ListNode *next;
       }; 

You defined float as value, so how do you expect it co hold char type? I changed your linkedlist so now it can take any type you desire:

#include <iostream>
using namespace std;
template <typename T>
class FloatList
{
private:
    // Declare a structure for the list
    struct ListNode
    {
        T value;
        struct ListNode* next;
    };
    ListNode* head;   // List head pointer

public:
    FloatList()
    {
        head = NULL;
    }// Constructor
    void appendNode(T num)
    {
        ListNode* newNode, * nodePtr;
        // Allocate a new node & store num
        newNode = new ListNode;
        newNode->value = num;
        newNode->next = NULL;

        // If there are no nodes in the list
        // make newNode the first node
        if (!head)
            head = newNode;
        else    // Otherwise, insert newNode at end
        {
            // Initialize nodePtr to head of list
            nodePtr = head;
            // Find the last node in the list
            while (nodePtr->next)
                nodePtr = nodePtr->next;
            // Insert newNode as the last node
            nodePtr->next = newNode;
        } cout << num << " has been APPENDED!" << endl;
    }
};



int main()
{
    FloatList<float> list;

    list.appendNode(2.5);
    list.appendNode(7.9);
    list.appendNode(12.6);
    FloatList<char> char_list;
    char_list.appendNode('c');
    char_list.appendNode('d');
    char_list.appendNode('e');
}

As your list is now templated class, you must specify what is the templated type:

FloatList<float> list;

The solution is really nice and simple, all you had to do is to change two things in your class definition: a) tell compiler that this class is templated

template <typename T>
    class FloatList

b) swap all floats into T (our desired type):

 float value;
 T value;
 void appendNode(float num) 
 void appendNode(T num)