Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE mbed wave_player
Fork of MazeRunner_Fall2017-shell by
Diff: doublely_linked_list.cpp
- Revision:
- 1:2c6ae0fe9a2a
- Parent:
- 0:cf4396614a79
--- a/doublely_linked_list.cpp Fri Nov 03 18:48:48 2017 +0000 +++ b/doublely_linked_list.cpp Fri Dec 29 15:32:31 2017 +0000 @@ -11,11 +11,14 @@ return newList; } +//i made LLNode* create_llnode(void* data) { - // Your code here - return NULL; - + LLNode* newNode = (LLNode*)malloc(sizeof(LLNode)); + newNode->previous = NULL; + newNode->next = NULL; + newNode->data = data; + return newNode; } @@ -31,58 +34,229 @@ (dLinkedList->head)->previous = newNode; dLinkedList->head = newNode; } -} - - -void insertTail(DLinkedList* dLinkedList, void* data){ - - // Your code here } +//i made +void insertTail(DLinkedList* dLinkedList, void* data){ + + LLNode* newNode = create_llnode(data); + if(dLinkedList->head == NULL){ + dLinkedList->size++; + dLinkedList->head = newNode; + dLinkedList->tail = newNode; + }else { + dLinkedList->size++; + newNode->previous = dLinkedList->tail; + (dLinkedList->tail)->next = newNode; + dLinkedList->tail = newNode; + } +} + +//i made int insertAfter(DLinkedList* dLinkedList, void* newData){ - // Your code here - return 0; + if(dLinkedList->current==NULL){ + return 0; + }else if(dLinkedList->current==dLinkedList->tail){ + insertTail(dLinkedList, newData); + return 1; + } + else{ + LLNode* newNode = create_llnode(newData); + LLNode* nextNode = (dLinkedList->current)->next; + nextNode->previous = newNode; + (dLinkedList->current)->next = newNode; + newNode->previous = dLinkedList->current; + newNode->next = nextNode; + dLinkedList->size++; + return 1; + } +} +//i made +int insertBefore(DLinkedList* dLinkedList, void* newData){ + + if (dLinkedList->current == NULL) + return 0; + else if(dLinkedList->current==dLinkedList->head){ + insertHead(dLinkedList,newData); + return 1; + } + else { + LLNode* newNode = create_llnode(newData); + LLNode* prevNode = (dLinkedList->current)->previous; + prevNode->next = newNode; + (dLinkedList->current)->previous = newNode; + newNode->previous = prevNode; + newNode->next = dLinkedList->current; + dLinkedList->size++; + return 1; + } } -int insertBefore(DLinkedList* dLinkedList, void* newData){ - - // Your code here - return 0; - +//i made +void* deleteBackward(DLinkedList* dLinkedList){ + LLNode* currNode = dLinkedList->current; + if (currNode == NULL) + return NULL; + else if (getSize(dLinkedList)==1){ + dLinkedList->current = NULL; + dLinkedList->head = NULL; + dLinkedList->tail = NULL; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return NULL; + } else if(currNode == dLinkedList->head){ + dLinkedList->head = currNode->next; + dLinkedList->current = NULL; + (dLinkedList->head)->previous = NULL; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return NULL; + } else if(currNode == dLinkedList->tail){ + dLinkedList->tail = currNode->previous; + (dLinkedList->tail)->next = NULL; + dLinkedList->current = dLinkedList->tail; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return getCurrent(dLinkedList); + } else { + (currNode->previous)->next = currNode->next; + dLinkedList->current = currNode->previous; + (currNode->next)->previous = dLinkedList->current; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return getCurrent(dLinkedList); + } } -void* deleteBackward(DLinkedList* dLinkedList){ +//i made +void* deleteForward(DLinkedList* dLinkedList) +{ + LLNode* currNode = dLinkedList->current; + if (currNode == NULL) + return NULL; + else if (getSize(dLinkedList)==1){ + dLinkedList->current = NULL; + dLinkedList->head = NULL; + dLinkedList->tail = NULL; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return NULL; + } else if(currNode == dLinkedList->head){ + dLinkedList->head = currNode->next; + dLinkedList->current = currNode->next; + (dLinkedList->head)->previous = NULL; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return getCurrent(dLinkedList); + } else if(currNode == dLinkedList->tail){ + dLinkedList->tail = currNode->previous; + (dLinkedList->tail)->next = NULL; + dLinkedList->current = NULL; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return NULL; + } else { + (currNode->next)->previous = currNode->previous; + dLinkedList->current = currNode->next; + (currNode->previous)->next = dLinkedList->current; + free(currNode->data); + free(currNode); + dLinkedList->size--; + return getCurrent(dLinkedList); + } +} - //Your code here. - return NULL; +//i made +void* removeBackward(DLinkedList* dLinkedList){ + LLNode* currNode = dLinkedList->current; + if (currNode == NULL) + return NULL; + else if (getSize(dLinkedList)==1){ + void* ldata = currNode->data; + dLinkedList->current = NULL; + dLinkedList->tail = NULL; + dLinkedList->head = NULL; + dLinkedList->size--; + free(currNode); + return ldata; + }else if (dLinkedList->current == dLinkedList->head){ + void* ldata = currNode->data; + dLinkedList->head = currNode->next; + (dLinkedList->head)->previous = NULL; + dLinkedList->current = NULL; + dLinkedList->size--; + free(currNode); + return ldata; + }else if (dLinkedList->current == dLinkedList->tail){ + void* ldata = currNode->data; + dLinkedList->current = currNode->previous; + dLinkedList->tail = currNode->previous; + (dLinkedList->tail)->next = NULL; + dLinkedList->size--; + free(currNode); + return ldata; + }else { + void* ldata = currNode->data; + dLinkedList->current = currNode->previous; + (dLinkedList->current)->next = currNode->next; + (currNode->next)->previous = dLinkedList->current; + dLinkedList->size--; + free(currNode); + return ldata; + } } - - -void* deleteForward(DLinkedList* dLinkedList){ - - //Your code here. - return NULL; - -} - - -void* removeBackward(DLinkedList* dLinkedList){ - - //Your code here. - return NULL; - -} - -void* removeForward(DLinkedList* dLinkedList){ - - //Your code here. - return NULL; +//i made +void* removeForward(DLinkedList* dLinkedList) +{ + LLNode* currNode = dLinkedList->current; + if (currNode == NULL) + return NULL; + else if (getSize(dLinkedList)==1){ + void* ldata = currNode->data; + dLinkedList->current = NULL; + dLinkedList->tail = NULL; + dLinkedList->head = NULL; + dLinkedList->size--; + free(currNode); + return ldata; + }else if (dLinkedList->current == dLinkedList->head){ + void* ldata = currNode->data; + dLinkedList->head = currNode->next; + (dLinkedList->head)->previous = NULL; + dLinkedList->current = currNode->next; + dLinkedList->size--; + free(currNode); + return ldata; + }else if (dLinkedList->current == dLinkedList->tail){ + void* ldata = currNode->data; + dLinkedList->current = NULL; + dLinkedList->tail = currNode->previous; + (dLinkedList->tail)->next = NULL; + free(currNode); + dLinkedList->size--; + return ldata; + }else { + void* ldata = currNode->data; + dLinkedList->current = currNode->next; + (dLinkedList->current)->previous = currNode->previous; + (currNode->previous)->next = dLinkedList->current; + free(currNode); + dLinkedList->size--; + return ldata; + } } @@ -95,54 +269,79 @@ free(dLinkedList); } - +//i made void* getHead(DLinkedList* dLinkedList){ - //Your code here. - return NULL; + LLNode* head = dLinkedList->head; + if (head == NULL) + return NULL; + else { + dLinkedList->current = dLinkedList->head; + return head->data; + } +} + +//i made +void* getTail(DLinkedList* dLinkedList){ + + LLNode* tail = dLinkedList->tail; + if (tail == NULL) + return NULL; + else { + dLinkedList->current = dLinkedList->tail; + return tail->data; + } } +//i made +void* getCurrent(DLinkedList* dLinkedList){ -void* getTail(DLinkedList* dLinkedList){ + LLNode* currNode = dLinkedList->current; + if (currNode==NULL) + return NULL; + else + return currNode->data; +} + + +//i made +void* getNext(DLinkedList* dLinkedList){ - //Your code here. + LLNode* currNode = dLinkedList->current; + if (currNode == NULL) + return NULL; + else if (currNode->next == NULL) { + dLinkedList->current = NULL; + return NULL; + }else{ + dLinkedList->current = currNode->next; + return (currNode->next)->data; + } +} + + +//i made +void* getPrevious(DLinkedList* dLinkedList){ - return NULL; + LLNode* currNode = dLinkedList->current; + if (currNode == NULL) + return NULL; + else if (currNode->previous == NULL) { + dLinkedList->current = NULL; + return NULL; + }else{ + dLinkedList->current = currNode->previous; + return (currNode->previous)->data; + } +} + +//i made +int getSize(DLinkedList* dLinkedList){ + + return dLinkedList->size; } -void* getCurrent(DLinkedList* dLinkedList){ - - //Your code here. - return NULL; - -} - - - -void* getNext(DLinkedList* dLinkedList){ - - //Your code here. - - return NULL; -} - - - -void* getPrevious(DLinkedList* dLinkedList){ - - //Your code here. - - return NULL; -} - - -int getSize(DLinkedList* dLinkedList){ - - //Your code here. - return 0; - -} \ No newline at end of file