Quick actions

cmd+k|ctrl+k

Navigation

Languages

LinkedList

Snippet info

Language

Dart

Visibility

public

Author

obihenry578

Created

2025-02-09T11:28:17.909794Z

Updated

2025-02-11T08:46:11.629142Z


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);
    
}
INFO