void CPPList::remove(ListNode *current){ if (current!= 0) { if (current == ListHeader) { ListHeader = current->next; } else{ findPreNode(current)->next = current->next; } delete current; _size--; } }
void CPPList::insert(ListNode *current, int number){ if (!is_empty()){ //do not insert if the list is empty ListNode *tmp = new ListNode; tmp->data() = number; if (current == ListHeader) { tmp->next = current; ListHeader = tmp; } else { tmp->next = current; findPreNode(current)->next = tmp; } _size++; } }
//删除号码 BOOL delCallNumber(Tree *pTree, NodeType *callNum, int len) { int i; int delIndex = 0; TreeNode *ptempNode; TreeNode *delList[CALL_NUM_LENGHT]; BOOL hasBorther[CALL_NUM_LENGHT]; memset(delList, 0, sizeof(delList)); memset(hasBorther, 0, sizeof(hasBorther)); if (pTree == NULL || callNum == NULL) return FALSE; delList[0] = pTree->root; if (delList[0] == NULL) return FALSE; if (delList[0]->val != callNum[0]) return FALSE; for (i=1; i<CALL_NUM_LENGHT; i++) { ptempNode = findChildNode(delList[i-1], callNum[i]); if (ptempNode == NULL) { printf("\ncall number not exist.\n"); return FALSE; } hasBorther[i] = delList[i-1]->child->brother != NULL ? TRUE : FALSE; delList[i] = ptempNode; } delIndex = getDelIndex(hasBorther, sizeof(hasBorther)/sizeof(hasBorther[0])); if (delIndex != -2) { if (delIndex == -1) { pTree->root = NULL; ptempNode = delList[0]; } else { //有兄弟节点 ptempNode = findPreNode(delList[delIndex], delList[delIndex+1]); if (ptempNode == NULL) return FALSE; if (ptempNode == delList[delIndex]) //左 delList[delIndex]->child = delList[delIndex+1]->brother; else ptempNode->brother = delList[delIndex+1]->brother; ptempNode = delList[delIndex+1]; } while (ptempNode) { ptempNode = delChildNode(ptempNode); } } else { return FALSE; } return TRUE; }