I believe the error has something to do with my mergeArray function. Its a modified version of the insertNode function. i tried to make it so that i can loop through and insert an entire array of elements into a linkedList. My program compiles without error but gives me a "cygwin wedge2: process died on signal 11." message when i try to run. please HELP!!!!

Thank you

// Implementation file for the NumberList class
#include <iostream>  // For cout  and NULL
#include <stdlib.h>
#include <string>   
   using namespace std;
	
   class NumberList
   {
   private:
   // Declare a structure for the list
      struct ListNode
      {
         double value;           // The value in this node
         struct ListNode *next;  // To point to the next node
      }; 
   
      ListNode *head;            // List head pointer
   
   public:
   // Constructor
      NumberList()
      { head = NULL; }
   
   // Linked list operations
      void mergeArray(double[],int);
      void appendNode(double);
      void insertNode(double);
      void displayList() const;
   };

//**************************************************
// appendNode appends a node containing the        *
// value pased into num, to the end of the list.   *
//**************************************************

   void NumberList::appendNode(double num)
   {
      ListNode *newNode;  // To point to a new node
      ListNode *nodePtr;  // To move through the list
   
   // Allocate a new node and store num there.
      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;
      }
   }
//**************************************************
// The insertNode function inserts a node with     *
// num copied to its value member.                 *
//**************************************************

   void NumberList::insertNode(double num)
   {
      ListNode *newNode;             // A new node
      ListNode *nodePtr;             // To traverse the list
      ListNode *previousNode = NULL; // The previous node
   
   // Allocate a new node and store num there.
      newNode = new ListNode;
      newNode->value = num;
   
   // If there are no nodes in the list
   // make newNode the first node
      if (!head)
      {
         head = newNode;
         newNode->next = NULL;
      }
      else  // Otherwise, insert newNode
      {
      // Position nodePtr at the head of list.
         nodePtr = head;
      
      // Initialize previousNode to NULL.
         previousNode = NULL;
      
      // Skip all nodes whose value is less than num.
         while (nodePtr != NULL && nodePtr->value < num)
         {  
            previousNode = nodePtr;
            nodePtr = nodePtr->next;
         }
      
      // If the new node is to be the 1st in the list,
      // insert it before all other nodes.
         if (previousNode == NULL)
         {
            head = newNode;
            newNode->next = nodePtr;
         }
         else  // Otherwise insert after the previous node.
         {
            previousNode->next = newNode;
            newNode->next = nodePtr;
         }
      }
   }

//**************************************************
// The mergeArray function                         *
//**************************************************

   void NumberList::mergeArray(double array[], int arrayLength)
   {
      ListNode *newNode;             // A new node
      ListNode *nodePtr;             // To traverse the list
      ListNode *previousNode = NULL; // The previous node
   
      for(int i=0; i<arrayLength; i++)
      {
      
      // Allocate a new node and store num there.
         newNode = new ListNode;
         newNode->value = array[i];
      
      // If there are no nodes in the list
      // make newNode the first node
         if (!head)
         {
            head->next = newNode;
            newNode->next = NULL;
         }
         else  // Otherwise, insert newNode
         {
         // Position nodePtr at the head of list.
            nodePtr = head;
         
         // Initialize previousNode to NULL.
            previousNode = NULL;
         
         // Skip all nodes whose value is less than num.
            while (nodePtr != NULL && nodePtr->value < array[i])
            {  
               previousNode = nodePtr;
               nodePtr = nodePtr->next;
            }
         
         // If the new node is to be the 1st in the list,
         // insert it before all other nodes.
            if (previousNode == NULL)
            {
               head = newNode;
               newNode->next = nodePtr;
            }
            else  // Otherwise insert after the previous node.
            {
               previousNode->next = newNode;
               newNode->next = nodePtr;
            }
         }
      }
   }


//**************************************************
// displayList shows the value                     *
// stored in each node of the linked list          *
// pointed to by head.                             *
//**************************************************

   void NumberList::displayList() const
   {
      ListNode *nodePtr;  // To move through the list
   
   // Position nodePtr at the head of the list.
      nodePtr = head;
   
   // While nodePtr points to a node, traverse
   // the list.
      while (nodePtr)
      {
      // Display the value in this node.
         cout << nodePtr->value << endl;
      
      // Move to the next node.
         nodePtr = nodePtr->next;
      }
   }

   int main()
   {
   // Define a NumberList and array objects.
      NumberList list; 
   	
   //Build the list with some values.
      list.appendNode(2.5);
      list.appendNode(7.9);
      list.appendNode(12.6);
   	
   
   
   
   // Insert a node in the middle of the list.
   	    
   	list.insertNode(10.5);
   	list.insertNode(3.6);
   	list.insertNode(3.5);
   	list.insertNode(3.0);
   	
   	
   
      double array[] = {5,8,8,9,6,1,7,45,14};
      double arrLen = sizeof(array);
      int sizeOfArr = arrLen/sizeof(double);
   	//cout<< sizeOfArr<< endl;
   	
   //Adds elements from array to the list in sorted order.	
      list.mergeArray(array, sizeOfArr);
   
   // Dispay the list
      list.displayList();
      return 0;
   }

Recommended Answers

All 4 Replies

Your program compiled and ran ok for me using VC++ 2010 Express on 64-bit Windows 7. Here's the output I got, but I don't know if it's right or wrong.

1
2.5
3
3.5
3.6
5
6
7
7.9
8
8
9
10.5
12.6
14
45
Press any key to continue . . .

There's a glitch at least in mergeArray() , if head is NULL , you end up doing head->next = newNode; -- I believe you know how to fix that.

commented: Thnx so much +2

There's a glitch at least in mergeArray() , if head is NULL , you end up doing head->next = newNode; -- I believe you know how to fix that.

instead should I do

head = newNode;

?

There's a glitch at least in mergeArray() , if head is NULL , you end up doing head->next = newNode; -- I believe you know how to fix that.

thanks i got it working in my compiler... i cant believe that it was such a simple error.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.