In: Computer Science
In Java:
In the SingleLinkedList defined in the textbook Section 2.5 (named KWSingleLinkedList there), add the following methods:
KWSingleLinkedList<String> Names = new KWSingleLinkedList,.();
names.addFirst("Sam");
names.addFirst("Harry");
names.addFirst("Dick");
names.addFirst("Tom");
/** Remove the first occurrence of element item.
@param item The item to be removed
@return true if item is found and removed; otherwise, return false.
*/
public boolean remove(E item)
/** Insert a new item before the one at position index, starting at 0
for the list head. The new item is inserted between the one at
position index‐1 and the one formerly at position index.
@param index The index where the new item is to be inserted
@param item The item to be inserted
@throws IndexOutOfBoundsException if the index is out of range
*/
public void add(int index, E item)
public class LinkedListDemo {
public static void main(String[] args) {
KWSingleLinkedList<String> names = new KWSingleLinkedList();
names.addFirst("Sam");
names.addFirst("Harry");
names.addFirst("Dick");
names.addFirst("Tom");
names.printList();
System.out.println("Removing Harry: " + names.remove("Harry"));
names.printList();
System.out.println("Adding Srinu at index 2: ");
names.add(2, "Srinu");
names.printList();
}
}
//Linked list class
class KWSingleLinkedList<E> {
private Node<E> head = null;
//adding a value
public void addFirst(E value) {
//first node
if (head == null) {
head = new Node(value);
return;
}
//insert at first
Node temp = new Node(value);
temp.setNext(head);
head = temp;
}
/**
* Print the entire list
*/
//print the list
public void printList() {
System.out.println();
System.out.printf("List::: ");
Node temp = head;
//traverse up to end
while (temp != null) {
System.out.print(temp.getValue() + " "); //print value
temp = temp.getNext();
}
System.out.println();
System.out.println();
}
/**
* Remove the first occurrence of element item.
*
* @param item The item to be removed
* @return true if item is found and removed; otherwise, return false.
*/
public boolean remove(E item) {
//empty list
if (head == null) {
return false;
}
//remove at first
if (head.getValue().equals(item)) {
head = head.getNext();
return true;
}
Node<E> temp = head;
Node<E> prev = null;
Node<E> prevToPrev = null;
boolean found = false;
//traverse to end
while (temp != null) {
//found value
if (temp.getValue().equals(item)) {
prevToPrev = prev; //hold pointer to prev of item
found = true;
}
prev = temp;
temp = temp.getNext();
if (found) {
break;
}
}
//remove item
if (prevToPrev != null) {
prev.setNext(null);
prevToPrev.setNext(temp);
return true;
}
return false;
}
/**
* Insert a new item before the one at position index, starting at 0
* for the list head. The new item is inserted between the one at
* position index‐1 and the one formerly at position index.
*
* @param index The index where the new item is to be inserted
* @param item The item to be inserted
* @throws IndexOutOfBoundsException if the index is out of range
*/
public void add(int index, E item) {
//throw index bounds exception if invalid index
if (index < 0 || index > getSize()) {
throw new IndexOutOfBoundsException();
}
//add first if index is 0
if (index == 0) {
addFirst(item);
return;
}
int count = 0;
Node<E> temp = head;
Node<E> prev = null;
//traverse until count is less than index
while (temp != null && count < index) {
prev = temp; //hold prev pointer of temp
count++;
temp = temp.getNext();
}
Node<E> newNode = new Node<>(item); //creating new node
//inserting at given index
prev.setNext(newNode);
newNode.setNext(temp);
}
public int getSize() {
Node<E> temp = head;
int size = 0;
while (temp != null) {
size++;
temp = temp.getNext();
}
return size;
}
}
class Node<T> {
private T value;
private Node next;
public Node(T value) {
this.value = value;
this.next = null;
}
public T getValue() {
return value;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
} |
![]() |