link newNode(int i) { link x = deleteNext(freelist); x->item = i; x->next = x; return x; }
void Token::deleteThis() { if (_next) { _str = _next->_str; _isName = _next->_isName; _isNumber = _next->_isNumber; _isBoolean = _next->_isBoolean; _isUnsigned = _next->_isUnsigned; _isSigned = _next->_isSigned; _isPointerCompare = _next->_isPointerCompare; _isLong = _next->_isLong; _isUnused = _next->_isUnused; _varId = _next->_varId; _fileIndex = _next->_fileIndex; _linenr = _next->_linenr; _link = _next->_link; if (_link) _link->link(this); deleteNext(); } else if (_previous) { // This should never be used for tokens // at the end of the list str(";"); } else { // We are the last token in the list, we can't delete // ourselves, so just make us ; str(";"); } }
LinkNode List::newNode(int i) { LinkNode x = deleteNext(freeList); x->data = i; x->next = x; return x; }
LinkList newNode(int i) { LinkList x = deleteNext(freelist);//从分配的链表中摘取一个节点 x->item = i; x->next = x; return x; }
void Token::deleteThis() { if (_next) { // Copy next to this and delete next _str = _next->_str; _type = _next->_type; _isUnsigned = _next->_isUnsigned; _isSigned = _next->_isSigned; _isPointerCompare = _next->_isPointerCompare; _isLong = _next->_isLong; _isStandardType = _next->_isStandardType; _isExpandedMacro = _next->_isExpandedMacro; _isAttributeConstructor = _next->_isAttributeConstructor; _isAttributeUnused = _next->_isAttributeUnused; _varId = _next->_varId; _fileIndex = _next->_fileIndex; _linenr = _next->_linenr; _link = _next->_link; _scope = _next->_scope; _function = _next->_function; _variable = _next->_variable; _originalName = _next->_originalName; if (_link) _link->link(this); deleteNext(); } else if (_previous && _previous->_previous) { // Copy previous to this and delete previous _str = _previous->_str; _type = _previous->_type; _isUnsigned = _previous->_isUnsigned; _isSigned = _previous->_isSigned; _isPointerCompare = _previous->_isPointerCompare; _isLong = _previous->_isLong; _isStandardType = _previous->_isStandardType; _isExpandedMacro = _previous->_isExpandedMacro; _isAttributeConstructor = _previous->_isAttributeConstructor; _isAttributeUnused = _previous->_isAttributeUnused; _varId = _previous->_varId; _fileIndex = _previous->_fileIndex; _linenr = _previous->_linenr; _link = _previous->_link; _scope = _previous->_scope; _function = _previous->_function; _variable = _previous->_variable; _originalName = _previous->_originalName; if (_link) _link->link(this); Token* toDelete = _previous; _previous = _previous->_previous; _previous->_next = this; delete toDelete; } else { // We are the last token in the list, we can't delete // ourselves, so just make us empty str(""); } }
void Token::deleteThis() { if (_next) { // Copy next to this and delete next _str = _next->_str; _tokType = _next->_tokType; _flags = _next->_flags; _varId = _next->_varId; _fileIndex = _next->_fileIndex; _linenr = _next->_linenr; _link = _next->_link; _scope = _next->_scope; _function = _next->_function; _variable = _next->_variable; _type = _next->_type; if (_next->_originalName) { delete _originalName; _originalName = _next->_originalName; _next->_originalName = nullptr; } values = _next->values; if (_link) _link->link(this); deleteNext(); } else if (_previous && _previous->_previous) { // Copy previous to this and delete previous _str = _previous->_str; _tokType = _previous->_tokType; _flags = _previous->_flags; _varId = _previous->_varId; _fileIndex = _previous->_fileIndex; _linenr = _previous->_linenr; _link = _previous->_link; _scope = _previous->_scope; _function = _previous->_function; _variable = _previous->_variable; _type = _previous->_type; if (_previous->_originalName) { delete _originalName; _originalName = _previous->_originalName; _previous->_originalName = nullptr; } values = _previous->values; if (_link) _link->link(this); Token* toDelete = _previous; _previous = _previous->_previous; _previous->_next = this; delete toDelete; } else { // We are the last token in the list, we can't delete // ourselves, so just make us empty str(""); } }
int main(int argc, char **argv) { /** VARIÁVEIS *****************************************************/ int i, N, M; Node t, x; link teste; if(argc != 3) { printf("USAGE: josephus <n_people> <m>\n"); return EXIT_FAILURE; } N = atoi(argv[1]); M = atoi(argv[2]); printf("Último membro restante: %d\n", N); printf("Último membro restante: %d\n", M); /** INICIA LISTA **************************************************/ initNodes(N); /* Não há mais que N argumentos */ /* * Estamos assumindo que cada nódulo, ao ser criado, * aponta para si mesmo. */ /* Inicializamos x com newNode(1) para termos onde * adicionar os próximos elementos */ for(i = 2, x = newNode(1); i <= N; i++) { t = newNode(i); insertNode(x,t); x = t; } for(teste = x; Next(teste) != x; teste = Next(teste)) { printf("%d ", Item(teste)); } while(x != Next(x)) { for(i = 1; i < M; i++) { printf("%d ", Item(x)); x = Next(x); } freeNode(deleteNext(x)); /* Cada vez que caminhamos pela lista, vamos * fazendo a remoção dos elementos. Logo, po- * demos apenas ir seguindo os argumentos con- * forme a necessidade. */ } printf("Último membro restante: %d\n", Item(x)); return 0; }
link_t free_even_nodes(link_t head) { link_t x,t; for(x=Next(head);x!=NULL && Next(x)!=NULL;x=Next(x)){ t=deleteNext(x); free(t); } return(head); }
void freeList(LinkList *xList) { if (!xList) return; iscsi_dev *dev = xList->head; while (dev->next != dev->next->next) { deleteNext(xList, dev); } freeElem(xList->head); freeElem(xList->tail); free(xList); }
link_t free_nodes(link_t head) { link_t x; int i; x=head; while(Next(x)!=NULL) { for(i=1; i<5 && Next(x)!=NULL; x=Next(x),i++); if(Next(x)!=NULL) free(deleteNext(x)); } return(head); }
link_t quit(link_t x) { int i; if(x==Next(x)) return(x); for(i=1;i<M;x=Next(x),i++) ; printf("%d ",Item(Next(x))); freeNode(deleteNext(x)); return(quit(x)); }
link_t move_largest_item(const link_t head) { link_t x=head,next_max,max,last_node; double max_value; for(max_value=Item(Next(x)),next_max=x;Next(x)!=NULL;x=Next(x)) if(Item(Next(x)) > max_value) max_value=Item(Next(x)),next_max=x; last_node=x; if(Next(next_max)!=last_node){ max=deleteNext(next_max); insertNext(last_node,max); } return(head); }
int main(int argc, char *argv[]) { int i, N = atoi(argv[1]), M = atoi(argv[2]); Node t, x; initNode(N); for (i = 2, x = newNode(1); i <= N; ++i) { t = newNode(1); insertNext(x, t); x = t; } while (x != Next(x)) { for (i = 1; i < M; i++) x = Next(x); freeNode(deleteNext(x)); } printf("%d\n", Item(x)); }
void Token::deleteThis() { if (_next) { // Copy next to this and delete next takeData(_next); _next->link(nullptr); // mark as unlinked deleteNext(); } else if (_previous && _previous->_previous) { // Copy previous to this and delete previous takeData(_previous); Token* toDelete = _previous; _previous = _previous->_previous; _previous->_next = this; delete toDelete; } else { // We are the last token in the list, we can't delete // ourselves, so just make us empty str(""); } }