work with the files and Nodes
Fri Dec 06 2024 20:50:23 GMT+0000 (Coordinated Universal Time)
Saved by @okkpurple
#include <iostream>
#include <fstream>
#include <string>
#include <memory>
struct Node {
std::string line;
int number;
std::shared_ptr<Node> next;
Node(std::string l = "", int n = 0) : line(l), number(n), next(nullptr) {}
};
void read(std::shared_ptr<Node>& root) {
std::ifstream reader("read.txt"); // cin
if (reader.is_open() && !reader.eof()) {
root = std::make_shared<Node>();
reader >> root->line >> root->number;
auto tmp = root;
while(!reader.eof()) {
tmp->next = std::make_shared<Node>();
tmp = tmp->next;
reader >> tmp->line >> tmp->number;
}
}
}
void type(std::shared_ptr<Node> root) {
auto tmp = root;
while (tmp) {
std::cout << tmp->line << " " << tmp->number << std::endl;
tmp = tmp->next;
}
}
void remove(std::shared_ptr<Node>& root, int const number) {
// for first root
if (root->number == number) {
root = root->next;
return;
}
auto tmp = root;
while (tmp->next && tmp->next->number != number) {
tmp = tmp->next;
}
if (tmp->next) {
tmp->next = tmp->next->next;
} else {
std::cout << "we didn' find this element" << std::endl;
}
}
void insert(std::shared_ptr<Node>& root, int pos, const std::string& str, int val) {
if (pos == 0) {
std::shared_ptr<Node> new_root = std::make_shared<Node>(str, val);
new_root->next = root;
root = new_root;
return;
}
auto tmp = root;
for (int i = 1; tmp && i < pos; ++i) {
tmp = tmp->next;
}
if (tmp) {
std::shared_ptr<Node> new_node = std::make_shared<Node>(str, val);
new_node->next = tmp->next;
tmp->next = new_node;
}
}
int main() {
std::shared_ptr<Node> root;
read(root);
std::cout << "list:" << std::endl;
type(root);
insert(root, 0, "New first line", 10);
std::cout << "\nuse insert to put new element to the first root:" << std::endl;
type(root);
insert(root, 2, "newline", 20);
std::cout << "\njust use void insert:" << std::endl;
type(root);
remove(root, 10);
std::cout << "\n delete root with value = 10:" << std::endl;
type(root);
return 0;
}



Comments