//DoubleNode class class DoubleNode { String str; DoubleNode prev, next; DoubleN
ID: 3741023 • Letter: #
Question
//DoubleNode class
class DoubleNode
{
String str;
DoubleNode prev, next;
DoubleNode(String str)
{
this.str = str;
prev = null;
next = null;
}
String getStr()
{
return str;
}
DoubleNode getNext()
{
return next;
}
void setNext(DoubleNode next)
{
this.next = next;
}
DoubleNode getPrev()
{
return prev;
}
void setPrev(DoubleNode prev)
{
this.prev = prev;
}
}
//LinkList class
class DoublyLinkedList
{
DoubleNode head, tail;
DoublyLinkedList()
{
head = null;
tail = null;
}
DoubleNode getHead()
{
return head;
}
DoubleNode getTail()
{
return tail;
}
void addFirst(String s)
{
DoubleNode node = new DoubleNode(s);
if (head == null)
tail = node;
else
head.setPrev(node);
node.setNext(head);
head = node;
}
void addLast(String s)
{
DoubleNode node = new DoubleNode(s);
if (head == null)
head = node;
else
tail.setNext(node);
node.setPrev(tail);
tail = node;
}
void printList()
{
System.out.print("The list: ");
DoubleNode node = head;
while (node != null)
{
System.out.print(node.getStr() + " ");
node = node.getNext();
}
System.out.println();
}
void printListReverse()
{
System.out.print("The list in reverse: ");
DoubleNode node = tail;
while (node != null)
{
System.out.print(node.getStr() + " ");
node = node.getPrev();
}
System.out.println();
}
DoubleNode search(String s)
{
DoubleNode node = head;
while (node != null && !node.getStr().equals(s))
{
node = node.getNext();
}
return node;
}
DoubleNode getElement(int index)
{
DoubleNode node = head;
int pos = 0;
while (node != null && pos < index)
{
node = node.getNext();
pos++;
}
return node;
}
void insert(DoubleNode node, String newElem) // insert after that node
// if node=null --> insert as first element
{
DoubleNode newNode = new DoubleNode(newElem);
if (node == null)
addFirst(newElem);
else
{
DoubleNode nextNode = node.getNext();
newNode.setNext(nextNode);
node.setNext(newNode);
newNode.setPrev(node);
if (nextNode == null) // or node == tail
tail = newNode;
else
nextNode.setPrev(newNode);
}
}
void remove(DoubleNode node)
{
DoubleNode prev = node.getPrev();
DoubleNode next = node.getNext();
if (head == tail) // one element
{
head = null;
tail = null;
}
else if (head == node) // remove first element
{
next.setPrev(null);
head = next;
}
else if (tail == node) // remove last element
{
prev.setNext(null);
tail = prev;
}
else
{
prev.setNext(next);
next.setPrev(prev);
}
}
// Creating swapping method
public void swap(DoubleNode x,DoubleNode y)
{
// Declaring temp node and swapping
DoubleNode previousNodeX = x.getPrev();
DoubleNode nextNodeX = x.getNext();
DoubleNode previousNodeY = y.getPrev();
DoubleNode nextNodeY = y.getNext();
// handling null pointer exception
if((x.getPrev()== null)&& (y.getNext()== null)&&(x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
nextNodeX.setPrev(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
previousNodeY.setNext(x);
head = y;
tail = x;
}
else if ((x.getPrev()== null) && (x.getNext() == y))
{
y.setPrev(previousNodeX);
nextNodeY.setPrev(x);
x.setNext(nextNodeY);
x.setPrev(y);
y.setNext(x);
head = y;
}
else if ((y.getNext()== null) && (x.getNext() == y))
{
previousNodeX.setNext(y);
y.setPrev(previousNodeX);
x.setNext(nextNodeY);
x.setPrev(y);
y.setNext(x);
tail = x;
}
else if ((y.getNext()== null) && (x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
previousNodeX.setNext(y);
nextNodeX.setPrev(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
previousNodeY.setNext(x);
tail = x;
}
else if ((x.getPrev()== null) && (x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
nextNodeX.setPrev(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
nextNodeY.setPrev(x);
previousNodeY.setNext(x);
head = y;
}
else if ((x.getPrev()!= null)&& (y.getNext()!= null)&& (x.getNext() == y) )
{
previousNodeX.setNext(y);
y.setPrev(previousNodeX);
nextNodeY.setPrev(x);
x.setNext(nextNodeY);
x.setPrev(y);
y.setNext(x);
}
else if ((x.getPrev()!= null)&& (y.getNext()!= null)&& (x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
nextNodeX.setPrev(y);
previousNodeX.setNext(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
nextNodeY.setPrev(x);
previousNodeY.setNext(x);
}
}
//Creating the sort method
public void sort()
{
//DoubleNode newHead = new DoubleNode(head.getStr());
DoubleNode pointer = head.next;
pointer.setPrev(head.next.getPrev());
pointer.setNext(head.next.getNext());
while(pointer != null)
{
DoubleNode innerPointer = head;
//System.out.println(head.str);
innerPointer.setPrev(head.getPrev());
innerPointer.setNext(head.getNext());
DoubleNode next = pointer.getNext();
if((innerPointer.getStr()).compareTo((pointer.getStr()))>0)
{
this.swap(innerPointer,pointer );
}
else
{
while((innerPointer.getStr()).equalsIgnoreCase(pointer.getStr())== false )
{
System.out.println("inner pointer "+innerPointer.getStr());
System.out.println("pointer "+pointer.getStr());
if((innerPointer.getStr()).compareTo((pointer.getStr()))>0)
{
this.swap(innerPointer, pointer);
}
innerPointer = innerPointer.next;
// System.out.println(innerPointer.getStr());
}
//System.out.println(pointer.getStr());
}
pointer = next;
}
}
}
//Main class calling sort
public class Assignment6Q1
{
public static void main(String[] args)
{
DoublyLinkedList list = new DoublyLinkedList();
list.addFirst("Orange");
list.addFirst("Grape");
list.addFirst("Banana");
list.addFirst("Kiwi");
list.addFirst("Apple");
list.addFirst("Pear");
list.printList();
list.swap(list.head, list.head.next);
list.sort();
list.printList();
list.printListReverse();
}
}
Please help with the Null pointer error, I cant just change the data for this project, I actually have to move the nodes.Here I am trying to write an insertion sort method but for some reason my code is giving me nullPointerException from :-
at assignment.pkg6q1.DoublyLinkedList.swap(DoublyLinkedList.java:219)
at assignment.pkg6q1.DoublyLinkedList.sort(DoublyLinkedList.java:257)
at assignment.pkg6q1.Assignment6Q1.main(Assignment6Q1.java:18)
BUILD FAILED (total time: 0 seconds)
Explanation / Answer
Nullpointerexception problem is solved you can check it
class DoubleNode
{
String str;
DoubleNode prev, next;
DoubleNode(String str)
{
this.str = str;
prev = null;
next = null;
}
String getStr()
{
return str;
}
DoubleNode getNext()
{
return next;
}
void setNext(DoubleNode next)
{
this.next = next;
}
DoubleNode getPrev()
{
return prev;
}
void setPrev(DoubleNode prev)
{
this.prev = prev;
}
}
//LinkList class
class DoublyLinkedList
{
DoubleNode head, tail;
DoublyLinkedList()
{
head = null;
tail = null;
}
DoubleNode getHead()
{
return head;
}
DoubleNode getTail()
{
return tail;
}
void addFirst(String s)
{
DoubleNode node = new DoubleNode(s);
if (head == null)
tail = node;
else
head.setPrev(node);
node.setNext(head);
head = node;
}
void addLast(String s)
{
DoubleNode node = new DoubleNode(s);
if (head == null)
head = node;
else
tail.setNext(node);
node.setPrev(tail);
tail = node;
}
void printList()
{
System.out.print("The list: ");
DoubleNode node = head;
while (node != null)
{
System.out.print(node.getStr() + " ");
node = node.getNext();
}
System.out.println();
}
void printListReverse()
{
System.out.print("The list in reverse: ");
DoubleNode node = tail;
while (node != null)
{
System.out.print(node.getStr() + " ");
node = node.getPrev();
}
System.out.println();
}
DoubleNode search(String s)
{
DoubleNode node = head;
while (node != null && !node.getStr().equals(s))
{
node = node.getNext();
}
return node;
}
DoubleNode getElement(int index)
{
DoubleNode node = head;
int pos = 0;
while (node != null && pos < index)
{
node = node.getNext();
pos++;
}
return node;
}
void insert(DoubleNode node, String newElem) // insert after that node
// if node=null --> insert as first element
{
DoubleNode newNode = new DoubleNode(newElem);
if (node == null)
addFirst(newElem);
else
{
DoubleNode nextNode = node.getNext();
newNode.setNext(nextNode);
node.setNext(newNode);
newNode.setPrev(node);
if (nextNode == null) // or node == tail
tail = newNode;
else
nextNode.setPrev(newNode);
}
}
void remove(DoubleNode node)
{
DoubleNode prev = node.getPrev();
DoubleNode next = node.getNext();
if (head == tail) // one element
{
head = null;
tail = null;
}
else if (head == node) // remove first element
{
next.setPrev(null);
head = next;
}
else if (tail == node) // remove last element
{
prev.setNext(null);
tail = prev;
}
else
{
prev.setNext(next);
next.setPrev(prev);
}
}
// Creating swapping method
public void swap(DoubleNode x,DoubleNode y)
{
// Declaring temp node and swapping
DoubleNode previousNodeX = x.getPrev();
DoubleNode nextNodeX = x.getNext();
DoubleNode previousNodeY = y.getPrev();
DoubleNode nextNodeY = y.getNext();
// handling null pointer exception
if((x.getPrev()== null)&& (y.getNext()== null)&&(x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
nextNodeX.setPrev(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
previousNodeY.setNext(x);
head = y;
tail = x;
}
else if ((x.getPrev()== null) && (x.getNext() == y))
{
y.setPrev(previousNodeX);
nextNodeY.setPrev(x);
x.setNext(nextNodeY);
x.setPrev(y);
y.setNext(x);
head = y;
}
else if ((y.getNext()== null) && (x.getNext() == y))
{
previousNodeX.setNext(y);
y.setPrev(previousNodeX);
x.setNext(nextNodeY);
x.setPrev(y);
y.setNext(x);
tail = x;
}
else if ((y.getNext()== null) && (x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
previousNodeX.setNext(y);
nextNodeX.setPrev(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
previousNodeY.setNext(x);
tail = x;
}
else if ((x.getPrev()== null) && (x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
nextNodeX.setPrev(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
nextNodeY.setPrev(x);
previousNodeY.setNext(x);
head = y;
}
else if ((x.getPrev()!= null)&& (y.getNext()!= null)&& (x.getNext() == y) )
{
previousNodeX.setNext(y);
y.setPrev(previousNodeX);
nextNodeY.setPrev(x);
x.setNext(nextNodeY);
x.setPrev(y);
y.setNext(x);
}
else if ((x.getPrev()!= null)&& (y.getNext()!= null)&& (x.getNext() != y))
{
y.setPrev(previousNodeX);
y.setNext(nextNodeX);
if(nextNodeX!=null)
nextNodeX.setPrev(y);
previousNodeX.setNext(y);
x.setPrev(previousNodeY);
x.setNext(nextNodeY);
nextNodeY.setPrev(x);
previousNodeY.setNext(x);
}
}
//Creating the sort method
public void sort()
{
//DoubleNode newHead = new DoubleNode(head.getStr());
DoubleNode pointer = head.next;
pointer.setPrev(head.next.getPrev());
pointer.setNext(head.next.getNext());
while(pointer!= null)
{
DoubleNode innerPointer = head;
//System.out.println(head.str);
innerPointer.setPrev(head.getPrev());
innerPointer.setNext(head.getNext());
DoubleNode next = pointer.getNext();
if((innerPointer.getStr()).compareTo((pointer.getStr()))>0)
{
this.swap(innerPointer,pointer );
}
else
{
while(innerPointer!=null && (innerPointer.getStr()).equalsIgnoreCase(pointer.getStr())== false )
{
System.out.println("inner pointer "+innerPointer.getStr());
System.out.println("pointer "+pointer.getStr());
if((innerPointer.getStr()).compareTo((pointer.getStr()))>0)
{
this.swap(innerPointer, pointer);
}
innerPointer = innerPointer.next;
// System.out.println(innerPointer.getStr());
}
//System.out.println(pointer.getStr());
}
pointer = pointer.next; //if u not write this ur loop will run infinite times
}
}
}
//Main class calling sort
public class Assignment6Q1
{
public static void main(String[] args)
{
DoublyLinkedList list = new DoublyLinkedList();
list.addFirst("Orange");
list.addFirst("Grape");
list.addFirst("Banana");
list.addFirst("Kiwi");
list.addFirst("Apple");
list.addFirst("Pear");
list.printList();
list.swap(list.head, list.head.next);
list.sort();
list.printList();
list.printListReverse();
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.