-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist.cpp
111 lines (93 loc) · 2.61 KB
/
list.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//
// list.cpp
// bug-cup-draw
//
// Created by Eduardo Castro on 22/12/21.
//
#ifndef LIST_CPP
#define LIST_CPP
#include <iostream>
#include "node.cpp"
using namespace std;
template<class T>
class List{
private:
Node<T> *head;
Node<T> *tail;
int count;
public:
List(){
setHead(NULL);
setTail(NULL);
setCount(0);
}
void setHead(Node<T> *head){
this->head = head;
}
void setTail(Node<T> *tail){
this->tail = tail;
}
void setCount(int count){
this->count = count;
}
Node<T> *getHead(){
return (head);
}
Node<T> *getTail(){
return (tail);
}
int getCount(){
return (count);
}
bool isEmpty(){
return (getHead()==NULL);
}
void addLast(T *data){
Node<T> *newNode = new Node<T>(data);
if(isEmpty()){
setHead(newNode);
setTail(newNode);
}else{
newNode->setPrevious(getTail());
getTail()->setNext(newNode);
setTail(getTail()->getNext());
}
setCount(getCount()+1);
}
void removeFirstNode(Node<T> *node){
setHead(node->getNext());
setCount(getCount()-1);
}
void removeLastNode(Node<T> *node){
setTail(node->getPrevious());
setCount(getCount()-1);
}
T *removeAt(int position){
if(isEmpty() || position < 0 || position >= getCount())
return NULL;
Node<T> *node;
if(position == 0){
node = getHead();
removeFirstNode(getHead());
} else if (position == getCount() - 1) {
node = getTail();
removeLastNode(getTail());
} else {
node = getHead();
for(int i = 0; i < position; i++){
node = node->getNext();
}
node->getPrevious()->setNext(node->getNext());
node->getNext()->setPrevious(node->getPrevious());
setCount(getCount()-1);
}
return node->getData();
}
void print(){
for(Node<T> *t = getHead();t!=NULL;t=t->getNext()){
t->getData()->toString();
cout<<" ";
}
}
};
#endif