class MyLinkedList { Node head; Node tail; int size = 0; public MyLinkedList() { } public int get(int index) { if(index<0 || index>=size) return -1; Node temp = head; int c = 0; while(temp!=null){ if(c == index) return temp.val; c++; temp = temp.right; } return -1; } public void addAtHead(int val) { if(head==null && tail==null){ Node node = new Node(val); head = node; tail = node; } else { Node node = new Node(val); node.right = head; head.left = node; head = node; } size++; //print("add at head val: "+ val, head); } public void addAtTail(int val) { if(head==null && tail==null){ Node node= new Node(val); head = node; tail = node; } else{ Node node = new Node(val); tail.right = node; node.left = tail; tail = node; } size++; //print("add at tail: "+val, head); } public void addAtIndex(int index, int val) { if(index<0 || index> size) return; if(index == size){ //add at tail addAtTail(val); return; } else if(index ==0){ addAtHead(val); return; } //Otherwise add at somewhere in the middle Node node = new Node(val); Node temp = head; int c = 0; while(temp!=null){ if(c == index) break; c++; temp = temp.right; } Node leftPartNode = temp.left; node.right = temp; temp.left =node; leftPartNode.right = node; node.left = leftPartNode; size++; //print("after add at index "+index +",val "+ val , head); } public void deleteAtIndex(int index) { if(index<0 || index>=size) return; if(head == tail){ head =null; tail =null; size--; return; } if(index ==0){ head = head.right; } else if(index == size-1){ tail = tail.left; tail.right = null; } else{ int c= 0; Node temp = head; while(temp!=null){ if(c == index) break; c++; temp = temp.right; } Node leftPartNode = temp.left; Node rightPartNode = temp.right; leftPartNode.right = rightPartNode; rightPartNode.left = leftPartNode; temp.left =null; temp.right = null; } size--; // print("deletion at index "+index, head); } public void print(String purpose, Node head){ System.out.println(purpose + ",current list size "+ size); Node temp = head; System.out.print("null<-"); while(temp!=null){ System.out.print(temp.val +"->"); temp = temp.right; } System.out.print("null"); System.out.println(); } } class Node{ Node left; Node right; int val; public Node(int d){ this.val = d; } public Node(int d, Node l, Node right){ this.val = d; this.left = l; this.right = right; } } /** * Your MyLinkedList object will be instantiated and called as such: * MyLinkedList obj = new MyLinkedList(); * int param_1 = obj.get(index); * obj.addAtHead(val); * obj.addAtTail(val); * obj.addAtIndex(index,val); * obj.deleteAtIndex(index); */ For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)