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;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.