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

void reverseListyString(ListyString *listy); Description: Reverse the linked lis

ID: 3723272 • Letter: V

Question

void reverseListyString(ListyString *listy);
Description: Reverse the linked list contained within listy. Be careful to guard against segfaults in the cases where listy is NULL or listy->head is NULL.
Runtime Consideration: Ideally, this function should be O(n), where n is the length of the ListyString. Note that if you repeatedly remove the head of listy’s linked list and insert it at the tail of a new linked list using a slow tail insertion function, that could devolve into an O(n2) approach to solving this problem.
Returns: Nothing. This is a void function.

Inside H file:

#ifndef __LISTY_STRING_H

#define __LISTY_STRING_H

typedef struct ListyNode

{

char data;

struct ListyNode *next;

} ListyNode;

typedef struct ListyString

{

ListyNode *head;

int length;

} ListyString;

int processInputFile(char *filename);

ListyString *createListyString(char *str);

ListyString *destroyListyString(ListyString *listy);

ListyString *cloneListyString(ListyString *listy);

void replaceChar(ListyString *listy, char key, char *str);

void reverseListyString(ListyString *listy);

ListyString *listyCat(ListyString *listy, char *str);

int listyCmp(ListyString *listy1, ListyString *listy2);

int listyLength(ListyString *listy);

void printListyString(ListyString *listy);

double difficultyRating(void);

double hoursSpent(void);

#endif

Explanation / Answer

void reverseListyString(ListyString *listy){

if(listy==NULL)
return ;
struct ListyNode* head = listy->head   
   struct ListyNode* prev   = NULL;

    struct ListyNode* current = head;

    struct ListyNode* next;

    while (current != NULL)

    {

        next = current->next;

        current->next = prev;  

        prev = current;

        current = next;

    }

head = prev;

listy->head = prev;

}