Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java.. SingleLinkedList problem.. So i have a project for class, creating a Sing

ID: 653848 • Letter: J

Question

Java.. SingleLinkedList problem..
So i have a project for class, creating a SingleLinkedList class with different methods for adding and removing in different types of ways.. I have stumbled upon a problem with on of my methods, for removing all occurences of a given value. It works for every case i have tested, but i have run in to a problem when i have two identical numbers in the end of the list, eg: 4, 5, 6, 7, 1, 2, 4, 4 and it tell the program to revomve all occurences of 4. It do not remove the last occurence of 4, so list ends up:  5, 6, 7, 1, 2, 4.. I dont know if i need to post the entire code, but i will post my method for removeElementAll() in hope that somebody can help me, and if u need more code to help, just say and i will post it..

private Node head;

public SingleLinkedList()

{

head = null;

}

public void removeElementAll(int element) throws NoSuchElementException {

       if (isEmpty()) {
           throw new NoSuchElementException();
       }
       Node ptr = head;
       Node previous = null;

       while (ptr != null) {
           if (ptr.element == element) {
               if (ptr == head) {
                   head = head.next;
               } else {
                   previous.next = ptr.next;
               }
           }
           previous = ptr;
           ptr = ptr.next;
       }
   }

Explanation / Answer

package com.java2novice.ds.linkedlist;

public class SinglyLinkedListImpl<T> {

private Node<T> head;
private Node<T> tail;

public void add(T element){

Node<T> nd = new Node<T>();
nd.setValue(element);
System.out.println("Adding: "+element);
/**
* check if the list is empty
*/
if(head == null){
//since there is only one element, both head and
//tail points to the same object.
head = nd;
tail = nd;
} else {
//set current tail next link to new node
tail.setNextRef(nd);
//set tail as newly created node
tail = nd;
}
}

public void addAfter(T element, T after){

Node<T> tmp = head;
Node<T> refNode = null;
System.out.println("Traversing to all nodes..");
/**
* Traverse till given element
*/
while(true){
if(tmp == null){
break;
}
if(tmp.compareTo(after) == 0){
//found the target node, add after this node
refNode = tmp;
break;
}
tmp = tmp.getNextRef();
}
if(refNode != null){
//add element after the target node
Node<T> nd = new Node<T>();
nd.setValue(element);
nd.setNextRef(tmp.getNextRef());
if(tmp == tail){
tail = nd;
}
tmp.setNextRef(nd);

} else {
System.out.println("Unable to find the given element...");
}
}

public void deleteFront(){

if(head == null){
System.out.println("Underflow...");
}
Node<T> tmp = head;
head = tmp.getNextRef();
if(head == null){
tail = null;
}
System.out.println("Deleted: "+tmp.getValue());
}

public void deleteAfter(T after){

Node<T> tmp = head;
Node<T> refNode = null;
System.out.println("Traversing to all nodes..");
/**
* Traverse till given element
*/
while(true){
if(tmp == null){
break;
}
if(tmp.compareTo(after) == 0){
//found the target node, add after this node
refNode = tmp;
break;
}
tmp = tmp.getNextRef();
}
if(refNode != null){
tmp = refNode.getNextRef();
refNode.setNextRef(tmp.getNextRef());
if(refNode.getNextRef() == null){
tail = refNode;
}
System.out.println("Deleted: "+tmp.getValue());
} else {
System.out.println("Unable to find the given element...");
}
}

public void traverse(){

Node<T> tmp = head;
while(true){
if(tmp == null){
break;
}
System.out.println(tmp.getValue());
tmp = tmp.getNextRef();
}
}

public static void main(String a[]){
SinglyLinkedListImpl<Integer> sl = new SinglyLinkedListImpl<Integer>();
sl.add(3);
sl.add(32);
sl.add(54);
sl.add(89);
sl.addAfter(76, 54);
sl.deleteFront();
sl.deleteAfter(76);
sl.traverse();

}
}

class Node<T> implements Comparable<T> {

private T value;
private Node<T> nextRef;

public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public Node<T> getNextRef() {
return nextRef;
}
public void setNextRef(Node<T> ref) {
this.nextRef = ref;
}
@Override
public int compareTo(T arg) {
if(arg == this.value){
return 0;
} else {
return 1;
}
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote