CHALLENGE ACTIVITY 13.2.1: Linked list negative values counting. Assign negative
ID: 3701239 • Letter: C
Question
CHALLENGE
ACTIVITY
13.2.1: Linked list negative values counting.
Assign negativeCntr with the number of negative values in the linked list.
// ===== Code from file IntNode.java =====
public class IntNode {
private int dataVal;
private IntNode nextNodePtr;
public IntNode(int dataInit, IntNode nextLoc) {
this.dataVal = dataInit;
this.nextNodePtr = nextLoc;
}
public IntNode(int dataInit) {
this.dataVal = dataInit;
this.nextNodePtr = null;
}
/* Insert node after this node.
* Before: this -- next
* After: this -- node -- next
*/
public void insertAfter(IntNode nodePtr) {
IntNode tmpNext;
tmpNext = this.nextNodePtr; // Remember next
this.nextNodePtr = nodePtr; // this -- node -- ?
nodePtr.nextNodePtr = tmpNext; // this -- node -- next
return;
}
// Grab location pointed by nextNodePtr
public IntNode getNext() {
return this.nextNodePtr;
}
public int getDataVal() {
return this.dataVal;
}
}
// ===== end =====
// ===== Code from file CustomLinkedList.java =====
import java.util.Random;
public class CustomLinkedList {
public static void main (String [] args) {
Random randGen = new Random();
IntNode headObj; // Create intNode objects
IntNode currObj;
IntNode lastObj;
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
int rand = randGen.nextInt(21) - 10;
currObj = new IntNode(rand);
lastObj.insertAfter(currObj); // Append curr
lastObj = currObj; // Curr is the new last item
}
currObj = headObj; // Print the list
while (currObj != null) {
System.out.print(currObj.getDataVal() + ", ");
currObj = currObj.getNext();
}
System.out.println("");
currObj = headObj; // Count number of negative numbers
while (currObj != null) {
/* Your solution goes here */
currObj = currObj.getNext();
}
System.out.println("Number of negatives: " + negativeCntr);
return;
}
}
// ===== end =====
Explanation / Answer
For counting the negative values, We just need to use the function getDataVal of IntNode and check if it is less than 0. If it is less than zero we need to increment the negativeCntr. Below is your code. Bold part is what I have changed. Please comment if you have any issues: -
public class CustomLinkedList {
public static void main(String[] args) {
Random randGen = new Random();
IntNode headObj; // Create intNode objects
IntNode currObj;
IntNode lastObj;
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
int rand = randGen.nextInt(21) - 10;
currObj = new IntNode(rand);
lastObj.insertAfter(currObj); // Append curr
lastObj = currObj; // Curr is the new last item
}
currObj = headObj; // Print the list
while (currObj != null) {
System.out.print(currObj.getDataVal() + ", ");
currObj = currObj.getNext();
}
System.out.println("");
currObj = headObj; // Count number of negative numbers
while (currObj != null) {
/* Your solution goes here */
if(currObj.getDataVal() < 0) {
negativeCntr++;
}
currObj = currObj.getNext();
}
System.out.println("Number of negatives: " + negativeCntr);
return;
}
}
Output
-1, -2, 3, 1, -4, -6, -3, -6, -7, -7, 0,
Number of negatives: 8