LinkedList
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
class LinkedList{
late Map head;
late var tail;
late int length;
LinkedList(value){
this.head = {
'value': value,
'next': null,
};
this.tail = this.head;
this.length = 1;
}
// let linkedList = {
// head:{
// value:10,
// next{
// value:5,
// next: next{
// value:6,
// next:null
// }
// }
// }
// }
// add at the back
append(value){
var newNode = {
'value': value,
'next': null,
};
tail['next'] = newNode;
tail = newNode;
length++;
}
// add to front
prepend(value){
var newNode = {
'value': value,
'next': head
};
head = newNode;
length++;
}
// add at any position and increment length
prinlnt(index){
if(index != 0){
dynamic array = [];
dynamic currentNode = head;
while(currentNode != null){
array.add(currentNode['value']);
currentNode = currentNode['next'];
}
print(array);
}
}
insert(index, value){
var newNode = {
'value': value,
'next': null,
};
if(index == 0){
this.prepend(value);
}else if(index >= length){
this.append(value);
}else{
dynamic previousNode = traverseList(index -1);
// this commented is also valid but might take more time;
// dynamic currentNode = traverseList(index );
//but this will take more memory
dynamic pointer = previousNode['next'] ;
previousNode['next'] = newNode;
newNode['next'] = pointer;;
// newNode['next'] = currentNode;
length++;
}
}
remove(index){
if(index == 0){
dynamic pointer = head['next'];
// head = null;
head = pointer;
length--;
}else if(index == length-1){
dynamic previousNode = traverseList(index -1);
dynamic pointer = tail['next'];
// tail = null;
previousNode['next'] = pointer;
length--;
}else{
dynamic previousNode = traverseList(index -1);
dynamic unwantedNode = previousNode['next'];
previousNode['next'] = unwantedNode['next'];
length--;
}
}
reverse(){
dynamic first = head;
tail = head;
dynamic second = head['next'];
if(first['next'] == null){
return first;
}
while(second != null ){
dynamic third = second['next'];
second['next'] = first;
first = second;
second = third;
}
head['next'] = null;
head = first;
}
traverseList(index){
dynamic currentNode = head;
int counter = 0;
while(counter != index){
currentNode = currentNode['next'];
counter++;
}
return currentNode;
}
@override
String toString (){
return 'Head: ${head} Tail: $tail length: $length';
}
}
void main() {
LinkedList linkedList = new LinkedList(10);
linkedList.append(5);
linkedList.prepend(6);
linkedList.insert(1,4);
linkedList.insert(20,90);
print(linkedList);
linkedList.prinlnt(7);
// linkedList.remove(2);
linkedList.reverse();
print(linkedList);
linkedList.prinlnt(7);
}
Dart
INFO