In: Computer Science
JAVA
Write a class to implement a list with the ability to insert a new item at any location within the list, remove an item, and search for an item. The list should use a linked list implementation. This implementation should make use of a dummy node at the head of the list and should have explict references head and previous. Add a method to the list that inserts elements in acsending order assuming the list is already sorted before each insert.
Hi, Please find the solution and rate the answer.
import java.util.Random; public class Main { public static void main(String[] args) { List list = new List(); Random random = new Random(); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); list.insertAsc(new Node(random.nextInt(1000))); System.out.println("Before"); list.printList(); System.out.println("After"); int x = random.nextInt(10000); System.out.println("Insert "+x+" at location 5"); list.insertAt(new Node(x),5); list.printList(); int x1 = random.nextInt(10000); System.out.println("Insert "+x1+" at location 5"); list.insertAt(new Node(x1),5); // list.insertAt(new Node(random.nextInt(10000)),5); list.printList(); list.insertAsc(new Node(100)); Node search = list.search(new Node(100)); System.out.println(); System.out.println(search ==null?"Not Found":search+" Found"); } }
public class Node { private int x; public Node previous; public Node next; public Node(int x) { this.x = x; } public int getX() { return x; } public void setX(int x) { this.x = x; } @Override public String toString() { return "Node{" + "x=" + x + '}'; } }
public class List { Node head = new Node(-100);//dummy node public void insertAsc(Node x) { Node temp = head; if (head.next == null) { head.next = x; x.previous = head; x.next = null; return; } while (temp.next!=null && temp.getX() < x.getX()) { temp = temp.next; } temp.previous.next = x;//realigning 4 pointer references x.next = temp; x.previous = temp.previous; temp.previous = x; } /** * @param x * @param loc if the loc is more than the no of elements it will place the element in th last */ public void insertAt(Node x, int loc) { Node temp = head; int i = 0; while (temp.next != null) { temp = temp.next; i++; if (i == loc) { break; } } if (i == loc) { temp = temp.previous; } temp.next.previous = x; x.previous = temp; x.next = temp.next; temp.next = x; } public void remove(Node x) { Node temp = head; while (temp.next != null) { if (temp.getX() == x.getX()) { break; } temp = temp.next; } Node tempp = temp; temp.previous.next = temp.next;//self explanatory temp.next.previous = temp.previous; temp.next = null; temp.previous = null; } public Node search(Node x) { Node temp = head; while (temp.next != null) { if (temp.getX() == x.getX()) { return temp; } temp = temp.next; } return null; } public void printList() { Node temp = head; while (temp.next != null) { System.out.println(temp.next); temp = temp.next; } } }
Sample output: