Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

8.25 LAB: Simple linked list Given an IntNode struct and the operating functions for a linked list, complete the following functions to extend the functionality

8.25 LAB: Simple linked list

Given an IntNode struct and the operating functions for a linked list, complete the following functions to extend the functionality of the linked list:

IntNode* IntNode_GetNth(IntNode* firstNode, int n)- Return a pointer to the nth node of the list starting at firstNode.

void IntNode_PrintList(IntNode* firstNode) - Call IntNode_PrintNodeData() to output values of the list starting at firstNode. Do not add extra space characters in between values.

int IntNode_SumList(IntNode* firstNode) - Return the sum of the values of all nodes starting at firstNode.

Note: The code for IntNode_Create() provided here differs from the code shown in the book.

The given main() performs various actions to test IntNode_GetNth(), IntNode_PrintList(), and IntNode_SumList().

main() reads 5 integers from a user:

The number of nodes to be added to a new list

The value of the first node of the list

An increment between the values of two consecutive nodes.

A value of a new node

The position of a node after which the new node will be added, with 1 indicating the first node

Ex: If the input is:

4 2 5 99 1 

the output is:

4 element list: 2 7 12 17 From second element: 7 12 17 sum: 38 New list: 2 99 7 12 17 

#include #include

typedef struct IntNode_struct { int dataVal; struct IntNode_struct* nextNodePtr; } IntNode;

// Allocate a node for initData IntNode* IntNode_Create (int initData) { IntNode* newNode = (IntNode*)malloc(sizeof(IntNode)); newNode->dataVal = initData; newNode->nextNodePtr = NULL; return newNode; }

/* Insert newNode after node. Before: thisNode -- next After: thisNode -- newNode -- next */ void IntNode_InsertAfter (IntNode* thisNode, IntNode* newNode) { IntNode* tmpNext = NULL;

tmpNext = thisNode->nextNodePtr; // Remember next thisNode->nextNodePtr = newNode; // this -- new -- ? newNode->nextNodePtr = tmpNext; // this -- new -- next }

// Print dataVal void IntNode_PrintNodeData(IntNode* thisNode) { printf("%d ", thisNode->dataVal); }

// Grab location pointed by nextNodePtr IntNode* IntNode_GetNext(IntNode* thisNode) { return thisNode->nextNodePtr; }

/* ******** New functions ********/

// Return the length of the list int IntNode_Length(IntNode* firstNode) { int length = 0; IntNode* currentNode = firstNode; while(currentNode != NULL) { ++length; currentNode = currentNode->nextNodePtr; }

return length; }

// Return the Nth element of the list. First node is 1. IntNode* IntNode_GetNth(IntNode* firstNode, int pos) { /* Type your code here. */ }

// Print the entire list starting at firstNode void IntNode_PrintList(IntNode* firstNode) { /* Type your code here. */ }

// Sum the numbers in the list int IntNode_SumList(IntNode* firstNode) { /* Type your code here. */ }

int main(void) { IntNode* firstNode = NULL; IntNode* lastNode = NULL; IntNode* newNode = NULL; IntNode* curNode = NULL; int listSize; // how many integers to read int increment; // increment between consecutive node values int firstNum; // first node value

// New node for newNum will be inserted after position newPos (first node = 1) int newPos; int newNum;

int i;

// Input: scanf("%d %d %d%d %d", &listSize, &firstNum, &increment, &newNum, &newPos);

// Create the list firstNode = IntNode_Create(firstNum); // Create node for first value // New list has just one node, so lastNode is same as firstNode lastNode = firstNode;

// Add nodes to the list for (i = 1; i < listSize; ++i) { // Create a new node for the next nmber newNode = IntNode_Create((increment * i) + firstNum); // Add the node to the end of the list IntNode_InsertAfter(lastNode, newNode); lastNode = newNode; }

// Print the list printf("%d element list: ", IntNode_Length(firstNode)); IntNode_PrintList(firstNode); printf(" ");

// If list length > 1 print the list starting at the second element printf("From second element: "); if (IntNode_Length(firstNode) <=1) { printf("No second element "); } else { IntNode_PrintList(IntNode_GetNext(firstNode)); printf(" "); }

// Print the sum printf("sum: %d ", IntNode_SumList(firstNode));

// Add a node after node newPos newNode = IntNode_Create(newNum); curNode = IntNode_GetNth(firstNode, newPos); IntNode_InsertAfter(curNode, newNode); printf("New list: "); IntNode_PrintList(firstNode); printf(" ");

return 0; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

DATABASE Administrator Make A Difference

Authors: Mohciine Elmourabit

1st Edition

B0CGM7XG75, 978-1722657802

More Books

Students also viewed these Databases questions