Linked list negative values counting.

Click For Summary
SUMMARY

The forum discussion centers on a C++ program that counts negative values in a linked list using the IntNode class. The user encounters an issue where the output for the count of negative numbers is incorrect, displaying the last negative value instead of the count. The problem lies in the implementation of the counting logic, specifically the line where negativeCntr is assigned the value of the current node instead of incrementing a counter for negative values.

PREREQUISITES
  • Understanding of C++ programming language
  • Familiarity with linked list data structures
  • Knowledge of class and object-oriented programming concepts
  • Basic understanding of random number generation in C++
NEXT STEPS
  • Implement a counting mechanism for negative values in the linked list
  • Learn about C++ control structures, specifically if statements for conditional logic
  • Explore debugging techniques in C++ to trace variable values during execution
  • Study the use of pointers and memory management in C++ linked lists
USEFUL FOR

C++ developers, computer science students, and anyone interested in linked list manipulation and debugging counting algorithms in programming.

Teh
Messages
47
Reaction score
0
I am having trouble with this program with negativeCntr . Any one explain what i am doing wrong and guide me please.

Code:
[CODE]#include <iostream>
#include <cstdlib>
using namespace std;

class IntNode {
public:
   IntNode(int dataInit = 0, IntNode* nextLoc = 0);
   void InsertAfter(IntNode* nodePtr);
   IntNode* GetNext();
   int GetDataVal();
private:
   int dataVal;
   IntNode* nextNodePtr;
};

// Constructor
IntNode::IntNode(int dataInit, IntNode* nextLoc) {
   this->dataVal = dataInit;
   this->nextNodePtr = nextLoc;
   return;
}

/* Insert node after this node.
 * Before: this -- next
 * After:  this -- node -- next
 */
void IntNode::InsertAfter(IntNode* nodeLoc) {
   IntNode* tmpNext = 0;

   tmpNext = this->nextNodePtr;    // Remember next
   this->nextNodePtr = nodeLoc;    // this -- node -- ?
   nodeLoc->nextNodePtr = tmpNext; // this -- node -- next
   return;
}

// Grab location pointed by nextNodePtr
IntNode* IntNode::GetNext() {
   return this->nextNodePtr;
}

int IntNode::GetDataVal() {
   return this->dataVal;
}

int main() {
   IntNode* headObj = 0; // Create intNode objects
   IntNode* currObj = 0;
   IntNode* lastObj = 0;
   int i = 0;            // Loop index
   int negativeCntr = 0;

   headObj = new IntNode(-1);        // Front of nodes list
   lastObj = headObj;

   for (i = 0; i < 10; ++i) {        // Append 10 rand nums
      currObj = new IntNode((rand() % 21) - 10);
      lastObj->InsertAfter(currObj); // Append curr
      lastObj = currObj;             // Curr is the new last item
   }

   currObj = headObj;                // Print the list
   while (currObj != 0) {
      cout << currObj->GetDataVal() << ", ";
      currObj = currObj->GetNext();
   }
   cout << endl;

   currObj = headObj;                // Count number of negative numbers
   while (currObj != 0) {

      /* Your solution goes here  */
   
      negativeCntr = currObj->GetDataVal();
      
      currObj = currObj->GetNext();
   }
   cout << "Number of negatives: " << negativeCntr << endl;

   return 0;
Testing with 6 negatives
Expected output: Number of negatives: 6
Your output: Number of negatives: -8
 
Technology news on Phys.org
If you're supposed to be counting the number of negatives, where's your code that is doing the counting?
 
squidsk said:
If you're supposed to be counting the number of negatives, where's your code that is doing the counting?

This is my code for counting the number of negatives but I am not sure if it it right.

Code:
negativeCntr = currObj->GetDataVal();
 
If that code is supposed to count (i.e. do addition) I think you're missing something critical on the line. Also if you're supposed to count only the negative numbers you need to figure out whether the number at that spot in the linked list is negative. Two other questions for you to ponder. First how does your output relate to the contents of the list (make changes to the list to get a better sense of this). Two what does the function GetDataVal return and what are you currently expecting it to return.
 

Similar threads

  • · Replies 11 ·
Replies
11
Views
12K
  • · Replies 2 ·
Replies
2
Views
6K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K