diff --git a/list/linked_list.cc b/list/linked_list.cc
new file mode 100644
index 0000000000000000000000000000000000000000..15834a5999ef209163a16b703f73f92259222e3b
--- /dev/null
+++ b/list/linked_list.cc
@@ -0,0 +1,327 @@
+#include "linked_list.h"
+/*
+    List::List(): 
+    head{nullptr}, tail{nullptr} 
+    {}
+ 
+    List::~List() {
+    
+    if(List_Is_Empty() == false ){
+
+    Node* my_node = head;
+
+    while (my_node != tail){
+        my_node = my_node->next;
+        delete my_node->previous;
+    }
+    delete my_node;
+    head = nullptr;
+    tail = nullptr;
+    list_size = 0; 
+
+}
+}
+
+     bool List::List_Is_Empty(){
+        if (head == nullptr)
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+
+    //List::Node::Node(int new_value):
+   // value{new_value}
+    //{}
+    
+    
+
+
+
+
+//omskriven insert funktion SOM INTE ÄR TESTAD 
+
+
+    void List::Insert_Head_Node(int value){
+
+    
+
+
+    }
+
+    if(List_Is_Empty() == true ){
+ 
+    Node* my_node = new Node(value);
+    my_node->previous = nullptr;
+    my_node->next = nullptr;
+    head = my_node;
+    tail = my_node;
+    }
+    else
+    { 
+    Node* my_node = new Node(value);
+    my_node->previous = tail;
+    my_node->next = nullptr;
+    tail->next = my_node;
+    tail = my_node;
+
+
+    }
+    }
+
+*/
+
+
+
+
+
+
+  /**  void List::Insert_Head_Node(int value){
+    Node* my_node = new Node(value);
+    my_node->previous = nullptr;
+    my_node->next = nullptr;
+    head = my_node;
+    tail = my_node;
+    }
+
+    //insert node at tail 
+
+void List::Insert_Tail_Node(int value){
+Node* my_node = new Node(value);
+my_node->previous = tail;
+my_node->next = nullptr;
+tail->next = my_node;
+tail = my_node;
+}
+
+
+void List::printlist(Node* head){
+Node* traverser = head;
+while(traverser != nullptr) {
+    cout<<traverser->value<<endl;
+    traverser = traverser->next; 
+}
+}
+
+
+int main()
+
+{
+
+List newlist;
+
+newlist.Insert_Head_Node(5);
+newlist.Insert_Tail_Node(3);
+newlist.Insert_Tail_Node(1);
+
+newlist.printlist(newlist.head);
+
+return 0;
+}
+
+
+
+
+    List::Node* Head;
+    List::Node* Tail;
+  
+   
+    List::Node* node = new List::Node();
+    node->Value = 1;
+    node->previous = nullptr;
+    node->next = nullptr;
+    Head = node;
+    Tail = node;
+
+*/
+
+
+
+
+
+
+/*void printlist(List::Node*Head){
+List::Node* Traverser = Head;
+while(Traverser != nullptr) {
+    cout<<Traverser->Value<<endl;
+    Traverser = Traverser->next; 
+}
+
+
+
+int main()
+{
+    Link* Head;
+    Link* Tail;
+
+    
+//Insert node at head
+    Link* link = new Link();
+    link->Value = 1;
+    link->previous = nullptr;
+    link->next = nullptr;
+    Head = link;
+    Tail = link;
+insert node at tail 
+    link = new Link();
+    link->Value = 1;
+    link->previous = Tail;
+    link->next = nullptr;
+    Tail->next = link;
+    Tail = link;
+// node 3 (same as node 2)
+    link = new Link();
+    link->Value = 1;
+    link->previous = Tail;
+    link->next = nullptr;
+    Tail->next = link;
+    Tail = link;
+
+printlist(Head);
+
+}*/
+
+    List::List(): 
+    head{nullptr}, tail{nullptr} 
+    {}
+
+   
+   
+    List::~List() {
+    
+    if(List_Is_Empty() == false ){
+
+    Node* my_node = head;
+
+    while (my_node != tail){
+        my_node = my_node->next;
+        delete my_node->previous;
+    }
+    delete my_node;
+    head = nullptr;
+    tail = nullptr;
+    list_size = 0; 
+
+}
+}
+
+
+    bool List::List_Is_Empty(){
+        if (head == nullptr)
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+
+    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 = my_node; 
+    } else if (insert_value > tail->value)
+    {
+        tail = my_node;
+        my_node->previous = tail;
+        tail->next = my_node;
+    
+   
+    } else {
+        my_node->next = tmp;
+        my_node->previous = tmp->previous;
+        tmp->previous->next = my_node;
+        tmp->previous = my_node;
+        
+
+   
+
+    }
+    }
+
+   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);
+}
+}
+
+
+//copy list konstruktor fixa argument 
+//List::Copy_List(List)
+//List()
+
+
+
+
+ void List::printlist(Node* head){
+Node* traverser = head;
+while(traverser != nullptr) {
+    cout<<traverser->value<<endl;
+    traverser = traverser->next; 
+}
+}
+
+
+int main()
+
+{
+
+List newlist;
+
+
+newlist.Insert_Node(1);
+newlist.Insert_Node(2);
+newlist.Insert_Node(3);
+
+
+
+
+
+newlist.printlist(newlist.head);
+
+return 0;
+}
\ No newline at end of file