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

Write these functions: InsertHead InsertAfter InsertBefore Delete Node *Search F

ID: 3625353 • Letter: W

Question

Write these functions:
InsertHead
InsertAfter
InsertBefore
Delete
Node *Search
FindPrevious(head, Node *Ptr)

*ALSO MAKE A DISPLAY MENU AND A PRINT FUNCTION.

Write the complete program and make sure it works!! Thank you :)

I have this so far:

#include
#include
#include
#include

using namespace std;

struct Node
{
string Item;
Node *Next;
};
void Insert(Node *&Head, string InsertThis);
void Show(Node *Head);
Node *Search(Node *Head, string Key);
void Delete(Node *&Head, Node *DeleteThis);

main()
{
Node *Head = NULL;
Insert(Head, "One");
Show(Head);
Insert(Head, "Two");
Show(Head);
Insert(Head, "Three");
Show(Head);
Insert(Head, "Four");
Show(Head);
Insert(Head, "Five");
Show(Head);
Insert(Head, "Six");
Show(Head);
Insert(Head, "Seven");
Show(Head);
Node *Hold = Search(Head, "Seven");
Delete(Head, Hold);
Show(Head);
Hold = Search(Head, "Five");
Delete(Head, Hold);
Show(Head);

system("pause");
}

Node *Search(Node *Head, string Key)
{
Node *Walker = Head;
while(Walker = NULL)
{
if(Walker -> Item == Key)
return Walker;
Walker = Walker -> Next;
}
}

void Delete(Node *&Head, Node *DeleteThis)
{
Node *Temp;
Node *Walker = Head;
if(DeleteThis == Head)
{
Temp = Head -> Next;
Head -> Next = NULL;
delete Head;
Head = Temp;
}
else
{
while((Walker != NULL) && (Walker -> Next != DeleteThis))
{
Walker = Walker -> Next;
}
if(Walker == NULL)
{
return;
}
Walker -> Next = NULL;
delete DeleteThis;
}
}

void Insert(Node *&Head, string InsertThis)
{
Node *Temp;
Temp = new(Node);
Temp -> Item = InsertThis;
Temp -> Next = Head;
Head = Temp;
}

void Show(Node *Head)
{
Node *Walker = Head;
cout << endl << "{";
while(Walker != NULL)
{
cout << "[" << Walker -> Item << "] ";
Walker = Walker -> Next;
}
cout << "}" << endl;
}




Explanation / Answer

//Works fine. #include #include using namespace std; struct Node { string Item; Node *Next; }; void InsertHead(Node *&Head, string InsertThis); Node* FindPrevious(Node* Head, Node *Ptr); void InsertAfter(Node* Head, Node* After, string InsertThis); void InsertBefore(Node* Head, Node* Before, string InsertThis); void Show(Node *Head); Node *Search(Node *Head, string Key); void Delete(Node *&Head, Node *DeleteThis); int main() { Node *Head = NULL; InsertHead(Head, "One"); Show(Head); InsertHead(Head, "Two"); Show(Head); InsertHead(Head, "Three"); Show(Head); InsertHead(Head, "Four"); Show(Head); InsertHead(Head, "Five"); Show(Head); InsertHead(Head, "Six"); Show(Head); InsertHead(Head, "Seven"); Show(Head); Node *Hold = Search(Head, "Seven"); Delete(Head, Hold); Show(Head); Hold = Search(Head, "Five"); Delete(Head, Hold); Show(Head); Hold = Search(Head, "One"); InsertAfter(Head, Hold, "Zero"); Show(Head); Hold = Search (Head, "Four"); InsertBefore(Head, Hold, "Five"); Show(Head); system("pause"); return 0; } Node *Search(Node *Head, string Key) { Node *Walker = Head; while(Walker != NULL) { if(Walker->Item == Key) return Walker; else Walker = Walker -> Next; } return 0; } void Delete(Node *&Head, Node *DeleteThis) { Node *Temp; if(DeleteThis == Head) { Temp = Head -> Next; delete Head; Head = Temp; } else { FindPrevious(Head, DeleteThis) ->Next = DeleteThis->Next; delete DeleteThis; } } Node* FindPrevious(Node* Head, Node *Ptr){ Node * Walker = Head; while((Walker != NULL) && (Walker -> Next != Ptr)) { Walker = Walker -> Next; } return Walker; } void InsertHead(Node *&Head, string InsertThis) { Node *Temp; Temp = new(Node); Temp -> Item = InsertThis; Temp -> Next = Head; Head = Temp; } void Show(Node *Head) { Node *Walker = Head; cout Next != Before) Temp = Temp->Next; Node* newNode = new Node; newNode->Item = InsertThis; newNode->Next = Before; Temp->Next = newNode; }