Unrolled LinkedList

Given an unrolled linked list implement a get method/function. Write tests for your function. Explain complexity in O(n) of your function. Write a put function.


public class UnrolledList {
    public Node root;
    int totalLen;
    public UnrolledList(){
        this.root = new Node();

    }
    class Node{
          char[] chars;
          int len;
          Node next;
          public Node(){
            this.chars = new char[5];
          }

    }

    // index表示是当前的第几个元素,len是整个list中元素的数目
    public char get(int index){ 
        Node node = list.head;
        int  total = list.totalLen;
        if(node == null || total <= 0 || index > total){
            return ' ';
        }
        while(node!=null && node.len < index){
            index -= node.len;
            node = node.next;
        }
        if(node == null){
            return  ' ';
        }
        return node.chars[index - 1];
    }


    // index 表示是当前的第几个元素,len是整个list中元素的数目
    public void insert(char ch, int index){
        Node node = list.head;
        Node pre = null;
        int  total = list.totalLen;
        if((node == null || total == 0) && index == 1){
            head = new Node();
            head.chars[0] = ch;
            head.len = 1;
            total = 1;
            return;
        }    
        if(node == null || total == 0 || index > total + 1){
            return ;
        }
        while(node!=null && node.len < index){
            index -= node.len;
            pre = node;
            node = node.next;
        }
        if( node == null){
            node = new Node();
            node.chars[index] = ch;
            node.len = 1;
            total = total + 1;
            pre.next = node;
            return;
         }
        if(node.len < 5) {
            for(int  i = node.len - 1; i>=index; i--){
                node.chars[i] = node.chars[i-1];
            }
            node.chars[index - 1] = ch;
            node.len ++;
        } else  {
            Node newNode = new Node();
            newNode.len = 5 - index;
            for(int  i = 0 ; i < newNode.len; i++){
                newNode.chars[i] = node.chars[ index - 1 + i];
                node.chars[index - 1 + i] =' ';
            }
            node.chars[index - 1] = ch;
            node.len= index;
            newNode.next = node.next;
            node.next = newNode;
         }
    }




// 0 based index 0 based,len也是长度
 public char get(int index){
    int i = index + 1; 
    Node node = list.head;
    int  total = list.totalLen;
    if(node == null || total < 0 || i > total){
     return ' ';
    }
    Node pre = null;
    while(node!=null && node.len < i){
        pre = node;
        i -= node.len;
        node = node.next;
    }
    if(node == null){
        return  ' ';
    }
    return node.chars[i - 1];
}

 public void insert(char ch, int index){
    index++;
    Node node = list.head;
    int  total = list.totalLen;
    if(node == null || total < 0 || index > total + 1){
        return ;
    }
  while(node!=null && node.len < index){
   index -= node.len;
   node = node.next;
  }

   if( node == null){
        node = new Node();
        node.chars[index] = ch;
        node.len = 1;
        total = total + 1;
        pre.next = node;
        return;
    }

  if(node.len < 5) {
    for(int  i = node.len; i>=index; i--){
        node.chars[i] = node.chars[i-1];
    }
    node.chars[index - 1] = ch;
  } else  {
    Node newNode = new Node();
    newNode.len = 5 - index;
    for(int i = 0; i<newNode.len; i++){
        newNode.chars[i] = node.chars[ index - 1 + i];
        node.chars[index - 1 + i] =' ';
    }
    node.chars[index - 1] = ch;
    node.len= index;
    newNode.next = node.next;
    node.next = newNode;
  }
 }



    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

results matching ""

    No results matching ""