ptr_t DeleteListNode_HT(data_t *Master2Mem, data_t *Master2SysAlloc, ptr_t hdPtr, int key){ data_t *myHeap = Master2Mem; ptr_t currentPtr = hdPtr; int currentKey = list_node_read_data(myHeap, currentPtr); ptr_t nextPtr, savePtr; int flag_search = 0; // search while(currentKey != key && currentPtr != NULL_PTR){ flag_search = 1; nextPtr = list_node_get_next_pointer(myHeap, currentPtr); savePtr = currentPtr; currentPtr = nextPtr; currentKey = list_node_read_data(myHeap, currentPtr); } // delete if(flag_search == 0){ nextPtr = list_node_get_next_pointer(myHeap, currentPtr); hdPtr = nextPtr; list_node_delete(Master2SysAlloc, currentPtr); }else{ nextPtr = list_node_get_next_pointer(myHeap, currentPtr); list_node_set_next(myHeap, savePtr, nextPtr); list_node_delete(Master2SysAlloc, currentPtr); hdPtr = hdPtr; } return hdPtr; }
/** Remove data from list. * * Removes the given node from a list and destroys it. Any data the node might * have is ignored. If asserts are on, we check wheter node is really present * in the list the caller is requesting us to remove it from. * * @param list Linked list. * @param node List node to remove. */ void list_remove(list_t *list, list_node_t *node) { /* Check whether node is in the list as claimed. */ assert(list_node_present(list, node)); list_node_unlink(node); node->data = NULL; list_node_delete(node); }
ptr_t DeleteListNode(data_t *Master2Mem, data_t *Master2SysAlloc, ptr_t hdPtr){ ptr_t nowPtr, nextPtr; nowPtr = hdPtr; hdPtr = list_node_get_next_pointer(Master2Mem, nowPtr); list_node_delete(Master2SysAlloc, nowPtr); return hdPtr; }
/* Delete the list */ ptr_t DeleteList(data_t *Master2Mem, data_t *Master2SysAlloc, ptr_t hdPtr){ ptr_t nowPtr; next_t offset; while(hdPtr != NULL_PTR){ nowPtr = hdPtr; offset = list_node_read_next(Master2Mem, hdPtr); hdPtr = nowPtr + offset; list_node_delete(Master2SysAlloc, nowPtr); } return hdPtr+1; }