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

DNode searchBackwards(DNode curr, String key) ITODO /Post: DNode is an address o

ID: 3717635 • Letter: D

Question

DNode searchBackwards(DNode curr, String key) ITODO /Post: DNode is an address of a doubly-linked list. returns the address of key if it occurs in the portion of the list // beginning at the head and ending at curr. Returns null if key does not occur in that portion, / or if DNode is null. return null; void insertAfter(DNode curr, DNode newNode) //TODO /Pre: curr and newNode are addresses for DNodes Post: newNode is inserted between curr and its next neighbour, i.e // let N be newNode's next neighbour, then: curr.next points to newNode, newNode.next points to N 7N.prev points to newNode and newNode.prev points to curr /1 If curr has no next neighbour, then newNode is inserted as the last node after curr void insertBefore(DNode curr, DNode newNode) I/TODO Pre: curr and newNode are addresses for DNodes /Post:newNode is inserted between curr and its previous neighbour, i.e // let P be newNode's previous neighbour, then: P.next points to newNode, newNode.next points to curr /I curr.prev points to newNode and newNode.next points to curr. // If curr has no previous neighbour, then newNode is inserted as the first node before curr

Explanation / Answer

Below implemented Double linked list with all functions, please read it carefully and program in working fine.

Hope this helps....

Thankyou.... :)

#include <stdio.h>

#include <stdlib.h>

struct node

{

struct node *prev;

int n;

struct node *next;

}*h,*temp,*temp1,*temp2,*temp4;

void insert1();

void insert2();

void insert3();

void traversebeg();

void traverseend(int);

void sort();

void search();

void update();

void delete();

int count = 0;

void main()

{

int ch;

h = NULL;

temp = temp1 = NULL;

printf(" 1 - Insert at beginning");

printf(" 2 - Insert at end");

printf(" 3 - Insert at position i");

printf(" 4 - Delete at i");

printf(" 5 - Display from beginning");

printf(" 6 - Display from end");

printf(" 7 - Search for element");

printf(" 8 - Sort the list");

printf(" 9 - Update an element");

printf(" 10 - Exit");

while (1)

{

printf(" Enter choice : ");

scanf("%d", &ch);

switch (ch)

{

case 1:

insert1();

break;

case 2:

insert2();

break;

case 3:

insert3();

break;

case 4:

delete();

break;

case 5:

traversebeg();

break;

case 6:

temp2 = h;

if (temp2 == NULL)

printf(" Error : List empty to display ");

else

{

printf(" Reverse order of linked list is : ");

traverseend(temp2->n);

}

break;

case 7:

search();

break;

case 8:

sort();

break;

case 9:

update();

break;

case 10:

exit(0);

default:

printf(" Wrong choice menu");

}

}

}

/* TO create an empty node */

void create()

{

int data;

temp =(struct node *)malloc(1*sizeof(struct node));

temp->prev = NULL;

temp->next = NULL;

printf(" Enter value to node : ");

scanf("%d", &data);

temp->n = data;

count++;

}

/* TO insert at beginning */

void insert1()

{

if (h == NULL)

{

create();

h = temp;

temp1 = h;

}

else

{

create();

temp->next = h;

h->prev = temp;

h = temp;

}

}

/* To insert at end */

void insert2()

{

if (h == NULL)

{

create();

h = temp;

temp1 = h;

}

else

{

create();

temp1->next = temp;

temp->prev = temp1;

temp1 = temp;

}

}

/* To insert at any position */

void insert3()

{

int pos, i = 2;

printf(" Enter position to be inserted : ");

scanf("%d", &pos);

temp2 = h;

if ((pos < 1) || (pos >= count + 1))

{

printf(" Position out of range to insert");

return;

}

if ((h == NULL) && (pos != 1))

{

printf(" Empty list cannot insert other than 1st position");

return;

}

if ((h == NULL) && (pos == 1))

{

create();

h = temp;

temp1 = h;

return;

}

else

{

while (i < pos)

{

temp2 = temp2->next;

i++;

}

create();

temp->prev = temp2;

temp->next = temp2->next;

temp2->next->prev = temp;

temp2->next = temp;

}

}

/* To delete an element */

void delete()

{

int i = 1, pos;

printf(" Enter position to be deleted : ");

scanf("%d", &pos);

temp2 = h;

if ((pos < 1) || (pos >= count + 1))

{

printf(" Error : Position out of range to delete");

return;

}

if (h == NULL)

{

printf(" Error : Empty list no elements to delete");

return;

}

else

{

while (i < pos)

{

temp2 = temp2->next;

i++;

}

if (i == 1)

{

if (temp2->next == NULL)

{

printf("Node deleted from list");

free(temp2);

temp2 = h = NULL;

return;

}

}

if (temp2->next == NULL)

{

temp2->prev->next = NULL;

free(temp2);

printf("Node deleted from list");

return;

}

temp2->next->prev = temp2->prev;

if (i != 1)

temp2->prev->next = temp2->next; /* Might not need this statement if i == 1 check */

if (i == 1)

h = temp2->next;

printf(" Node deleted");

free(temp2);

}

count--;

}

/* Traverse from beginning */

void traversebeg()

{

temp2 = h;

if (temp2 == NULL)

{

printf("List empty to display ");

return;

}

printf(" Linked list elements from begining : ");

while (temp2->next != NULL)

{

printf(" %d ", temp2->n);

temp2 = temp2->next;

}

printf(" %d ", temp2->n);

}

/* To traverse from end recursively */

void traverseend(int i)

{

if (temp2 != NULL)

{

i = temp2->n;

temp2 = temp2->next;

traverseend(i);

printf(" %d ", i);

}

}

/* To search for an element in the list */

void search()

{

int data, count = 0;

temp2 = h;

if (temp2 == NULL)

{

printf(" Error : List empty to search for data");

return;

}

printf(" Enter value to search : ");

scanf("%d", &data);

while (temp2 != NULL)

{

if (temp2->n == data)

{

printf(" Data found in %d position",count + 1);

return;

}

else

temp2 = temp2->next;

count++;

}

printf(" Error : %d not found in list", data);

}

/* To update a node value in the list */

void update()

{

int data, data1;

printf(" Enter node data to be updated : ");

scanf("%d", &data);

printf(" Enter new data : ");

scanf("%d", &data1);

temp2 = h;

if (temp2 == NULL)

{

printf(" Error : List empty no node to update");

return;

}

while (temp2 != NULL)

{

if (temp2->n == data)

{

temp2->n = data1;

traversebeg();

return;

}

else

temp2 = temp2->next;

}

printf(" Error : %d not found in list to update", data);

}

/* To sort the linked list */

void sort()

{

int i, j, x;

temp2 = h;

temp4 = h;

if (temp2 == NULL)

{

printf(" List empty to sort");

return;

}

for (temp2 = h; temp2 != NULL; temp2 = temp2->next)

{

for (temp4 = temp2->next; temp4 != NULL; temp4 = temp4->next)

{

if (temp2->n > temp4->n)

{

x = temp2->n;

temp2->n = temp4->n;

temp4->n = x;

}

}

}

traversebeg();

}