Question

In this code, I build a single-linked list using a node class that has been created....

In this code, I build a single-linked list using a node class that has been created. How could I change this code to take data of type T, rather than int. (PS: ignore the fact that IOHelper.getInt won't work for the type T... ie second half of main).

Here's my code right now:

public class SLList {

public SLNode head = null;

public SLNode tail = null;

public void add(int a) {// add() method present for testing purposes

SLNode newNode = new SLNode(a);

if (head == null) {

head = newNode;

tail = newNode;

} else {

tail.next = newNode;

tail = newNode;

}

}

public void SLswap(int i) throws illegalOperation {//i is index of node to change. method swaps specified node of index "i" with following node.

if(i>=(size()-1))

throw new illegalOperation("must swap one of the nodes, OR or you tried to swap last node... but cant do that since this method swaps node with next one");

if (size() < 2)

throw new illegalOperation("cant swap if theres less than two elements");

else if (size() == 2) {

SLNode placeholder = tail;

tail = head;

head = placeholder;

} // end else if

else if(i==0) {

SLNode anotherTemp = head.next;

SLNode temp = head.next.next;

head.next.next = head;

head.next = temp;

head = anotherTemp;

}//end else if

else {

SLNode iterationNode = head;

for (int j = 0; j<i; j++) {//order of pointing: iterationNode => iterationNode.next => nodeB(iterationNode.next.next) => tempA(iterationNode.next.next.next)... GOAL: swap iterationNode.next with nodeB(iteraitonNode.next.next)

if (j==(i-1)) {//ie: "if" condition met if the next iterationNode.next is of index i, therefore trying to swap iterationNode.next with iterationNode.next.next

SLNode tempA = iterationNode.next.next.next;

SLNode tempB = iterationNode.next.next;

iterationNode.next.next.next = iterationNode.next;

iterationNode.next.next = tempA;

iterationNode.next = tempB;

break;

}

iterationNode = iterationNode.next; //iterate to next node

} // end for-loop

}

}

public int size() {//returns number of nodes in SingleLinkedList

SLNode u = head;

int size = 0;

while (u != null) {

size++;

u = u.next;

}

return size;

}

public void display() { //prints values of all nodes in SLL, starting from head

SLNode current = head;

if(head == null) {

System.out.println("List is empty");

return;

}

System.out.println("Nodes of doubly linked list: ");

while(current != null) {

//Prints each node by incrementing the pointer.

System.out.print(current.data + " ");

current = current.next;

}

System.out.println('\n');

}

public static void main(String[] args) {

SLList myList = new SLList();

myList.add(3);

myList.add(6); //WANT TO BE ABLE TO ADD THINGS OF TYPE T!!

myList.add(1);

myList.add(4);

myList.add(2);

try {

myList.SLswap(2);

}catch(illegalOperation e) {};

myList.display();

SLList yourList = new SLList();

int numAdds = IOHelper.getInt("enter number of add calls to make: ");

int toAdd;

try {

for(int i=0; i<numAdds; i++) {

toAdd=IOHelper.getInt("enter integer to add: ");

yourList.add(toAdd);

}

int toSwap = IOHelper.getInt("enter index to swap: ");

yourList.SLswap(toSwap);} catch(illegalOperation e) {};

yourList.display();

System.out.println("DONE");

}//end main

}//end SLList

public class SLNode {

int data; //data that a node holds

SLNode next; // next node in the SSList that this given node will point to

  

public SLNode(int data) {

this.data = data;

this.next = null;

}

}

Homework Answers

Answer #1

Hello,

Below is the code required for the above problem. I noticed a couple of discrepancies which I am pointing out as well. Hope it helps.

First to let the Single Linked List use any other data as well instead of int, we have to define the node class in such a way that it takes any data as well instead of just int. I have defined it below :

//Ndde class for the single linked list
public class SLNode<T> {
    T data; //data that a node holds
    SLNode next; // next node in the SSList that this given node will point to

    public SLNode(T data) {
        this.data = data;
        this.next = null;
    }
}

The class above will take any data now instead of just int.

One thing I noticed in the SLList class,which appeared to me as an error was the use of illegalOperation. I am guessing that it is a user defined exception class designed by you or it is a part of your code as it's not available to me. If it is not, I think you would like to change the name of the class and change it to IllegalOperationException instead of just illegalOperation. It enhances the readability and keep up with good Java coding practices as well. If it's not defined by you, and you're trying to throw an exception, I would suggest you use the basic Exception class like this

throw new Exception("your message here")

instead of illegalOperation. Throwing and catching this would be much better I guess.

Below is the code for the class SLList which will take any other data as well. I haven't made any changes to IOHelper taking in int, just defined how it can use any other data to create the list as required in the question above, so I have included the main method as it is  :

public class SLList<T> {

    public SLNode head = null;
    public SLNode tail = null;

    public void add(T a) {// add() method present for testing purposes
        SLNode newNode = new SLNode(a);
        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            tail.next = newNode;
            tail = newNode;
        }
    }

    public void SLswap(int i) throws IllegalOperation {//i is index of node to change. method swaps specified node of index "i" with following node.

        if(i>=(size()-1))
            throw new illegalOperation("must swap one of the nodes, OR or you tried to swap last node... but cant do that since this method swaps node with next one");

        if (size() < 2)
            throw new illegalOperation("cant swap if theres less than two elements");
        else if (size() == 2) {
            SLNode placeholder = tail;
            tail = head;
            head = placeholder;
        } // end else if

        else if(i==0) {
            SLNode anotherTemp = head.next;
            SLNode temp = head.next.next;
            head.next.next = head;
            head.next = temp;
            head = anotherTemp;
        }//end else if
        else {

            SLNode iterationNode = head;
            for (int j = 0; j<i; j++) {//order of pointing: iterationNode => iterationNode.next => nodeB(iterationNode.next.next) => tempA(iterationNode.next.next.next)... GOAL: swap iterationNode.next with nodeB(iteraitonNode.next.next)
                if (j==(i-1)) {//ie: "if" condition met if the next iterationNode.next is of index i, therefore trying to swap iterationNode.next with iterationNode.next.next
                    SLNode tempA = iterationNode.next.next.next;
                    SLNode tempB = iterationNode.next.next;
                    iterationNode.next.next.next = iterationNode.next;
                    iterationNode.next.next = tempA;
                    iterationNode.next = tempB;
                    break;
                }
                iterationNode = iterationNode.next; //iterate to next node
            } // end for-loop
        }
    }

    public int size() {//returns number of nodes in SingleLinkedList
        SLNode u = head;
        int size = 0;
        while (u != null) {
            size++;
            u = u.next;
        }
        return size;
    }

    public void display() { //prints values of all nodes in SLL, starting from head

        SLNode current = head;

        if(head == null) {
            System.out.println("List is empty");
            return;
        }

        System.out.println("Nodes of doubly linked list: ");
        while(current != null) {
            //Prints each node by incrementing the pointer.
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println('\n');
    }

    public static void main(String[] args) {

        SLList myList = new SLList();
        myList.add(3);
        myList.add(6); //WANT TO BE ABLE TO ADD THINGS OF TYPE T!!
        myList.add(1);
        myList.add(4);
        myList.add(2);

        try {
            myList.SLswap(2);
        }catch(illegalOperation e) {};

        myList.display();
        SLList yourList = new SLList();
        int numAdds = IOHelper.getInt("enter number of add calls to make: ");
        int toAdd;

        try {
            for(int i=0; i<numAdds; i++) {
                toAdd=IOHelper.getInt("enter integer to add: ");
                yourList.add(toAdd);
            }
            int toSwap = IOHelper.getInt("enter index to swap: ");
            yourList.SLswap(toSwap);
        } catch(illegalOperation e) {};

        yourList.display();
        System.out.println("DONE");
    }//end main

}//end SLList

I hope that helped. :)

Know the answer?
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for?
Ask your own homework help question
Similar Questions
public class DoublyLinkedList { Node Head; // head of Doubly Linked List //Doubly Linked list Node...
public class DoublyLinkedList { Node Head; // head of Doubly Linked List //Doubly Linked list Node class Node { int value; Node prev; Node next; // Constructor to create a new node Node(int d) { value = d; } } // Inserting a node at the front of the list public void add(int newData) { // allocate node and put in the data Node newNode = new Node(newData); // Make the next of new node as head // and previous...
This is the java code that I have, but i cannot get the output that I...
This is the java code that I have, but i cannot get the output that I want out of it. i want my output to print the full String Form i stead of just the first letter, and and also print what character is at the specific index instead of leaving it empty. and at the end for Replaced String i want to print both string form one and two with the replaced letters instead if just printing the first...
Question: I get a Segmentation fault error sometimes when I addElementBack or print. Am I using...
Question: I get a Segmentation fault error sometimes when I addElementBack or print. Am I using pointers correctly and deleting memory properly? #ifndef DYNAMICARRAY_H #define DYNAMICARRAY_H #include <cstdlib> #include <iostream> using namespace std; // Node class class Node { int data; Node* next; Node* prev; public: Node(); Node(int); void SetData(int newData) { data = newData; }; void SetNext(Node* newNext) { next = newNext; }; void SetPrev(Node* newPrev) { prev = newPrev; }; int getData() { return data; }; Node* getNext()...
i want to complete this code to insert a new node in the middle of list...
i want to complete this code to insert a new node in the middle of list (take a node data from user, search the node and insert new node after this node). this is the code #include <iostream> #include <stdlib.h> using namespace std ; struct Node{                int data;                Node *link ;}; struct Node *head=NULL, *tail=NULL; /* pointers to Node*/ void InsertFront(); void InsertRear(); void DeleteFront(); void DeleteRear(); int main(){                int choice;                do{                               cout << "1:...
Please explain code 1 and code 2 for each lines code 1 public class MyQueue {...
Please explain code 1 and code 2 for each lines code 1 public class MyQueue {    public static final int DEFAULT_SIZE = 10;    private Object data[];    private int index; code 2 package test; import java.util.*; /* Class Node */ class Node { protected Object data; protected Node link; /* Constructor */ public Node() { link = null; data = 0; } /* Constructor */ public Node(Object d,Node n) { data = d; link = n; } /*...
It is about C++linked list code. my assignment is making 1 function, in below circumstance,(some functions...
It is about C++linked list code. my assignment is making 1 function, in below circumstance,(some functions are suggested for easier procedure of making function.) void search_node(struct linked_list* list, int find_node_ value) (The function to make) This function finds the node from the list that value is same with find_node_value and count the order of the node. This function should print message “The order of (node_value) is (order).” and error message “Function search_node : There is no such node to search.”....
IN C++ PLEASE!!! What needs to be done is in the code itself where it is...
IN C++ PLEASE!!! What needs to be done is in the code itself where it is written TO DO List! #include<iostream> using namespace std; template<typename T> class DoubleList{​​​​​     class Node{​​​​​     public: T value; Node* next; Node* prev;         Node(T value = T(), Node* next = nullptr, Node* prev = nullptr){​​​​​             this->value = value;             this->next = next;             this->next = next;         }​​​​​     }​​​​​;     int size;     Node* head;     Node* tail; public:     DoubleList(){​​​​​         size = 0;         head = nullptr;     }​​​​​     int length(){​​​​​         return size;     }​​​​​...
Java Language Add a method (convertToRing ()) that converts the list to a circular. This is,...
Java Language Add a method (convertToRing ()) that converts the list to a circular. This is, which makes the last node instead of pointing to null point to the first. Code: class Node { int value; Node nextNode; Node(int v, Node n) { value = v; nextNode = n; } Node (int v) { this(v,null); } } class LinkedList { Node head; //head = null; LinkedList() { } int length() { Node tempPtr; int result = 0; tempPtr = head;...
Java Language Add a method (convertToRing ()) that converts the list to a circular. This is,...
Java Language Add a method (convertToRing ()) that converts the list to a circular. This is, which makes the last node instead of pointing to null point to the first. Code: class Node { int value; Node nextNode; Node(int v, Node n) { value = v; nextNode = n; } Node (int v) { this(v,null); } } class LinkedList { Node head; //head = null; LinkedList() { } int length() { Node tempPtr; int result = 0; tempPtr = head;...
How do I implement this method BalancedByNodeCount() ? public class BinarySearchTree { private Node root; private...
How do I implement this method BalancedByNodeCount() ? public class BinarySearchTree { private Node root; private boolean isBalancedByNodeCount() { /**************************************************************************** Implement this method and replace the return statement below with your code. * Definition of Balance tree (On page 372 of book): * An unbalanced tree is created when most of the nodes are on one side of the root or the other. ****************************************************************************/    return false; }       public static void main(String args[]) { int[] values1 = {50,...
ADVERTISEMENT
Need Online Homework Help?

Get Answers For Free
Most questions answered within 1 hours.

Ask a Question
ADVERTISEMENT