Skip to content
Snippets Groups Projects
Commit fc258ea2 authored by Alrik Appelfeldt's avatar Alrik Appelfeldt
Browse files

Delete linked_list.cc

parent 7d816c66
No related branches found
No related tags found
No related merge requests found
#include "linked_list.h"
//List::Node::Node(int new_value):
//value{new_value}
//{}
//omskriven insert funktion SOM INTE ÄR TESTAD
List::List():
head{nullptr}, tail{nullptr}
{}
List::List(List const& rhs) :
List()
{
for (int i{ 0 }; i < rhs.get_size(); i++) {
Insert_Node(rhs.at(i));
}
}
List::List(List&& rhs) :
List()
{
*this = std::move(rhs);
}
List::~List() {
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
tail = nullptr;
list_size = 0;
}
bool List::List_Is_Empty(){
if (head == nullptr)
{
return true;
}
else
{
return false;
}
}
int List::get_size()const
{
return list_size;
}
int List::at(int const& position)const
{
if (position < get_size())
{
Node* tmp = head;
for (int i = 0; i < position; i++)
{
tmp = tmp->next;
}
return tmp->value;
}
else {
throw std::logic_error("Större än listan");
}
}
List::Node::Node(int insert_value):
value{insert_value}
{}
//omskriven insert funktion SOM INTE ÄR TESTAD
void List::Insert_Node(int insert_value) {
if (List_Is_Empty()) {
Node* my_node = new Node(insert_value);
head = my_node;
tail = my_node;
}
else {
Node* tmp = head;
while (tmp->next != nullptr && insert_value > tmp->value) {
tmp = tmp->next;
}
Node* my_node = new Node(insert_value);
if (insert_value < tmp->value) {
my_node->next = head;
my_node->previous = nullptr;
head->previous = my_node; // Update previous node's pointer
head = my_node;
}
else if (insert_value > tail->value) {
my_node->previous = tail;
tail->next = my_node;
tail = my_node;
}
else {
my_node->next = tmp;
my_node->previous = tmp->previous;
tmp->previous->next = my_node;
tmp->previous = my_node;
}
}
list_size++;
}
void List::remove(int const& pos) {
Node* tmp = head;
for (int i = pos; i > 0; i--) {
tmp = tmp->next;
}
if (tmp->previous == nullptr && tmp->next == nullptr) {
delete tmp;
head = nullptr;
tail = nullptr;
}
else if (tmp->next == nullptr) {
tail = tmp->previous;
tail->next = nullptr;
delete tmp;
}
else if (tmp->previous == nullptr) {
head = tmp->next;
head->previous = nullptr;
delete tmp;
}
else {
tmp->previous->next = tmp->next;
delete tmp;
}
list_size--;
}
int List::get_size()
{
return list_size;
}
//fixa argument
List::List(std::initializer_list<int> const &list)
{
List();
for (int n: list){
Insert_Node(n);
}
}
List& List::operator =(List const& rhs)
{
int tmp = get_size();
for (int k{ tmp }; k > 0; k--)
{
remove(0);
}
for (int i{ 0 }; i < rhs.get_size(); i++) {
Insert_Node(rhs.at(i));
}
list_size = rhs.get_size();
return *this;
}
List& List::operator =(List&& rhs) //FLyttilldelning
{
Node* tmp_head = head;
Node* tmp_tail = tail;
int tmp_size = get_size();
list_size = rhs.get_size();
rhs.list_size = tmp_size;
head = rhs.head;
tail = rhs.tail;
rhs.head = tmp_head;
rhs.tail = tmp_tail;
return *this;
}
ostream& operator << (ostream& os, List const& rhs)
{
for (int i{ 0 }; i < rhs.get_size(); i++)
{
os << rhs.at(i);
if (i + 1 != rhs.get_size()) {
os << " ";
}
}
return os;
}
//copy list konstruktor fixa argument
//List::Copy_List(List)
//List()
void List::printlist(){
Node* traverser = head;
while(traverser != nullptr) {
cout << traverser->value << endl;
traverser = traverser->next;
}
}
/*
int main()
{
List newlist{3, 5, 7, 11, 13};
newlist.remove(4);
newlist.printlist();
return 0;
}
*/
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment