Created
June 1, 2016 14:27
-
-
Save senapk/801bdce16ca7047ec1aecc710a94f7ad to your computer and use it in GitHub Desktop.
Lista ordenada sem cabeça utilizando a recursão com elo.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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