Skip to content

Instantly share code, notes, and snippets.

@senapk
Created June 1, 2016 14:27
Show Gist options
  • Save senapk/801bdce16ca7047ec1aecc710a94f7ad to your computer and use it in GitHub Desktop.
Save senapk/801bdce16ca7047ec1aecc710a94f7ad to your computer and use it in GitHub Desktop.
Lista ordenada sem cabeça utilizando a recursão com elo.
#include <iostream>
struct snode{
int value;
snode * next;
snode(int v = 0, snode * n = nullptr){
value = v;
next = n;
}
};
//lista simples ordenada e sem cabeca
struct lista{
snode * head;
lista(){
head = nullptr;
}
~lista(){
clear(head);
head = nullptr;
}
void _insert(snode * node, int value, snode **elo){
if(node == nullptr){
*elo = new snode(value);
return;
}
if(node->value > value){
*elo = new snode(value, node);
return;
}
_insert(node->next, value, &node->next);
}
void _pback(snode * node, int value, snode **elo){
if(node == nullptr){
*elo = new snode(value);
return;
}
_pback(node->next, value, &node->next);
}
void _remove(snode * node, int value, snode ** elo){
if(node == nullptr)
return;
_remove(node->next, value, &node->next);
if(node->value == value){
*elo = node->next;
delete node;
return;
}
}
//retorna o elo do no
//ou onde ele deveria estar
snode ** _find_elo(snode * node, int value, snode ** elo){
if(node == nullptr)
return elo;
if(node->value >= value)
return elo;
return _find_elo(node->next, value, &node->next);
}
snode ** find_elo(int value){
return _find_elo(head, value, &head);
}
bool exist(int value){
auto elo = find_elo(value);
auto node = *elo;
return (node != nullptr & node->value == value);
}
void new_insert(int value){
auto elo = find_elo(value);
*elo = new snode(value, *elo);
}
void insert(int value){
_insert(head, value, &head);
}
void clear(snode * node){
if(node == nullptr)
return;
clear(node->next);
delete(node);
}
void _show(snode * node){
if(node == nullptr)
return;
cout << node->value << " ";
_show(node->next);
}
void show(){
cout << "[ ";
_show(head);
cout << " ]";
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment