DOUBLY LINKED LIST Change the adjacent nodes of a doubly linked list C++ Solutio
ID: 3800979 • Letter: D
Question
DOUBLY LINKED LIST
Change the adjacent nodes of a doubly linked list C++
Explanation / Answer
#include #include typedef struct node_v { int id; struct node_v* prev; struct node_v* next; } Node_v; typedef Node_v* Node; void print(Node node) { while (node->prev != NULL) node = node->prev; printf(" [%d]",node->id); while (node->next != NULL) { node = node->next; printf("-[%d]",node->id); } printf(" "); } void connect(Node first,Node second) { first->next = second; second->prev = first; } Node createNode(int id) { Node node = (Node)malloc(sizeof(Node_v)); node->id = id; node->prev = NULL; node->next = NULL; return node; } int areTheyNeighbours(Node A,Node B) { return ( A->next == B && B->prev == A ) || ( A->prev == B && B->next == A ); } void refreshOuterPointers(Node A) { if (A->prev != NULL) A->prev->next = A; if (A->next != NULL) A->next->prev = A; } void swap(Node A,Node B) { Node swapperVector[4]; swapperVector[0] = A->prev; swapperVector[1] = B->prev; swapperVector[2] = A->next; swapperVector[3] = B->next; if (areTheyNeighbours(A,B)) { A->prev = swapperVector[2]; B->prev = swapperVector[0]; A->next = swapperVector[3]; B->next = swapperVector[1]; } else { A->prev = swapperVector[1]; B->prev = swapperVector[0]; A->next = swapperVector[3]; B->next = swapperVector[2]; } refreshOuterPointers(A); refreshOuterPointers(B); } int main() { Node n1 = createNode(1); Node n2 = createNode(2); Node n3 = createNode(3); Node n4 = createNode(4); connect(n1,n2); connect(n2,n3); connect(n3,n4); printf(" Initial state:"); print(n2); printf("[1] [2]: "); swap(n1,n2); print(n1); printf("[2] [4]: "); swap(n2,n4); print(n4); return 0; }Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.