Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hello, I need the following code in C. It\'s builds off of the code below. the d

ID: 3709549 • Letter: H

Question

Hello, I need the following code in C. It's builds off of the code below. the directions are under the code. Thank you. A sample output would be greatly appreciated.

/*Code to build off of*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

// structure node for linked list

typedef struct node {

int data;

struct node *next;

} node;

// find function

struct node *find(struct node *start, int data){

struct node *p;

p = start;

while(p != NULL){

if (p->data == data){

return p;

}

p=p->next;

}

return NULL;

}

//insert function

struct node *insert(struct node **start, int dataAfter, int newData){

  

struct node *q, *p;

  

p = find(*start, dataAfter);

if (p != NULL){

q = (struct node *)malloc(sizeof(struct node));

q->data = newData;

q->next = p->next;

p->next = q;

return q;

}

return NULL;

}

//delete function

int delete(struct node **start, int data){

  

struct node *q, *p;

if((*start)->data == data)

{

*start = (*start)->next;

return 1;

}

else

{

q=p=*start;

while(q->data != data && q->next!=NULL)

{

p=q;

q=q->next;

}

if(q->data == data)

{

p->next = q->next;

return 1;

}

else

{

return 0;

}

}

}

struct node * addToList(struct node **base, int data)

{

struct node *newNode;

newNode = (struct node*) malloc(sizeof(struct node));

struct node *temp;

newNode->data = data;

newNode->next = NULL;

if(*base == NULL)

*base = newNode;

else

{

temp = *base;

while(temp->next != NULL)

temp=temp->next;

temp->next = newNode;

}

return newNode;

}

/*

* Walk the list and print the data

*/

void printList(struct node *list)

{

while (list != NULL)

{

fprintf(stdout, "data: %3d ", list->data);

list = list->next;

}

return;

}

/*

* pass the input file to main, then add the data from the input file

* to the list. NB The list starts as an empty list.

*/

int main(int argc, char **argv)

{

struct node *root = NULL; // The root of the list

struct node *temp = NULL;

// struct node *base = NULL; // Placeholder for current end of the list

char *inBuf = NULL; // input buffer

FILE * ifp;

  

inBuf = malloc(100); //get a 100 character buffer for input data

if (NULL == inBuf) // Check for success

{ //Let 'em know we failed to get a buffer

fprintf(stderr, "No memory - good bye! ");

return -1;

}

ifp = fopen(argv[1], "rwb"); //Get the filename from the command line

if (NULL == ifp) // Check for success

{ //Let 'em know the filename wasn't found

fprintf(stderr, "%s file not found. ", argv[1]);

return -1;

}

  

/*

   * Read the file, then add the data to the list

   * All the while keep track of the last added node in temp

   */

// Code from StackOverflow

int i,j,d1,d2;

char c,value[10]; //command char

while (fgets(inBuf, sizeof(inBuf),ifp))

  

{

c=inBuf[0];

i = 2;

j=0;

d1=0;

d2=0;

if(c=='p')

{

printList(root);

continue;

}

while(inBuf[i] != '')

{

if(inBuf[i]==' ')

{

j=0;

i++;

sscanf(value, "%d", &d1);

if(c=='i')

{

  

}

continue;

}

value[j]=inBuf[i];

value[j+1]='';

j++;

i++;

}

sscanf(value, "%d", &d2);

if(d1>0)

{

if(c=='i')

{

//printf("insert:%d %d ",d1,d2);

temp = insert(&root,d1,d2);

if (NULL == temp)

{

printf("Failed to add - good bye ");

return -1;

}

}

}

else

{

if(c=='i')

{

if (NULL == root) // First node add to the list

{

//printf("add to list: %d %d ",d1,d2);

root = addToList(&root, d2);

if (NULL == root)

{

printf("Failed to add - good bye ");

return -1;

}

}

else

{

//printf("%d %d ",d1,d2);

temp = addToList(&root, d2);

if (NULL == temp)

{

printf("Failed to add - good bye ");

return -1;

}

}

}

if(c=='f')

{

temp = find(root,d2);

if(temp!=NULL)

{

printf("%d - Data Found ",temp->data);

}

else

printf("%d - Data Not Found ",d2);

}

if(c=='d')

{

if(delete(&root,d2)==1)

printf("%d - Deleted Successfully ",d2);

else

printf("%d - Could not Delete ",d2);

}

}

}

printList(root);

fclose(ifp);

return 0;

}

/*Directions*/

Using the code you built, add the command and function to reverse the list. The reverse function has the following constraints:

Must be recursive.

Cannot make a copy of the list to create a duplicate or external input list. (A copy of an important pointer is acceptable.)

Accept the command "r" to invoke the reverse function.

HINT This is all about pointer manipulation.

The success of the reverse command can be verified by using the "p" or print command from Lab 1.

Explanation / Answer

I have Implemented the reverseList function. Test and let me know if there is any concern.


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

// structure node for linked list

typedef struct node {

int data;

struct node *next;

} node;

// find function

struct node *find(struct node *start, int data){

struct node *p;

p = start;

while(p != NULL){

if (p->data == data){

return p;

}

p=p->next;

}

return NULL;

}

//insert function

struct node *insert(struct node **start, int dataAfter, int newData){

  

struct node *q, *p;

  

p = find(*start, dataAfter);

if (p != NULL){

q = (struct node *)malloc(sizeof(struct node));

q->data = newData;

q->next = p->next;

p->next = q;

return q;

}

return NULL;

}

//delete function

int delete(struct node **start, int data){

  

struct node *q, *p;

if((*start)->data == data)

{

*start = (*start)->next;

return 1;

}

else

{

q=p=*start;

while(q->data != data && q->next!=NULL)

{

p=q;

q=q->next;

}

if(q->data == data)

{

p->next = q->next;

return 1;

}

else

{

return 0;

}

}

}

struct node * addToList(struct node **base, int data)

{

struct node *newNode;

newNode = (struct node*) malloc(sizeof(struct node));

struct node *temp;

newNode->data = data;

newNode->next = NULL;

if(*base == NULL)

*base = newNode;

else

{

temp = *base;

while(temp->next != NULL)

temp=temp->next;

temp->next = newNode;

}

return newNode;

}

/*

* Walk the list and print the data

*/

void printList(struct node *list)

{

while (list != NULL)

{

fprintf(stdout, "data: %3d ", list->data);

list = list->next;

}

return;

}


void reverseList(struct node **root)

{

struct node* prev = NULL;
struct node* current = *root;
struct node* next = NULL;
while (current != NULL)
{
next = current->next;  
current->next = prev;
prev = current;
current = next;
}
*root = prev;

}

/*

* pass the input file to main, then add the data from the input file

* to the list. NB The list starts as an empty list.

*/

int main(int argc, char **argv)

{


struct node *root = NULL; // The root of the list
struct node *temp = NULL;

// struct node *base = NULL; // Placeholder for current end of the list

char *inBuf = NULL; // input buffer

FILE * ifp;

  

inBuf = malloc(100); //get a 100 character buffer for input data

if (NULL == inBuf) // Check for success

{ //Let 'em know we failed to get a buffer

fprintf(stderr, "No memory - good bye! ");

return -1;

}

ifp = fopen("input.txt", "rwb"); //Get the filename from the command line

if (NULL == ifp) // Check for success

{ //Let 'em know the filename wasn't found

fprintf(stderr, "%s file not found. ", argv[1]);

return -1;

}

  

/*

* Read the file, then add the data to the list

* All the while keep track of the last added node in temp

*/

// Code from StackOverflow

int i,j,d1,d2;

char c,value[10]; //command char

while (fgets(inBuf, sizeof(inBuf),ifp))

  

{

c=inBuf[0];

i = 2;

j=0;

d1=0;

d2=0;

if(c=='p')

{

printList(root);

continue;

}

while(inBuf[i] != '')

{

if(inBuf[i]==' ')

{

j=0;

i++;

sscanf(value, "%d", &d1);

if(c=='i')

{

  

}

continue;

}

value[j]=inBuf[i];

value[j+1]='';

j++;

i++;

}

sscanf(value, "%d", &d2);

if(d1>0)

{

if(c=='i')

{

//printf("insert:%d %d ",d1,d2);

temp = insert(&root,d1,d2);

if (NULL == temp)

{

printf("Failed to add - good bye ");

return -1;

}

}

}

else

{

if(c=='i')

{

if (NULL == root) // First node add to the list

{

//printf("add to list: %d %d ",d1,d2);

root = addToList(&root, d2);

if (NULL == root)

{

printf("Failed to add - good bye ");

return -1;

}

}

else

{

//printf("%d %d ",d1,d2);

temp = addToList(&root, d2);

if (NULL == temp)

{

printf("Failed to add - good bye ");

return -1;

}

}

}

if(c=='f')

{

temp = find(root,d2);

if(temp!=NULL)

{

printf("%d - Data Found ",temp->data);

}

else

printf("%d - Data Not Found ",d2);

}

if(c=='d')

{

if(delete(&root,d2)==1)

printf("%d - Deleted Successfully ",d2);

else

printf("%d - Could not Delete ",d2);

}
  
if(c=='r')

{
reverseList(&root);
  
  
}

}

}

printList(root);

fclose(ifp);

return 0;

}




Thanks, PLEASE UPVOTE if helpful

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote