Fix NullPointer Exception (#4142)
This commit is contained in:
parent
0c618b5ee8
commit
1ce907625b
@ -122,20 +122,23 @@ public class SinglyLinkedList extends Node {
|
|||||||
* Reverse a singly linked list from a given node till the end
|
* Reverse a singly linked list from a given node till the end
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Node reverseList(Node node) {
|
public Node reverseList(Node node) {
|
||||||
Node prevNode = head;
|
Node prev = null;
|
||||||
while (prevNode.next != node) {
|
Node curr = node;
|
||||||
prevNode = prevNode.next;
|
|
||||||
}
|
while (curr != null && curr.next != null) {
|
||||||
Node prev = null, curr = node, next;
|
Node next=curr.next;
|
||||||
while (curr != null) {
|
|
||||||
next = curr.next;
|
|
||||||
curr.next = prev;
|
curr.next = prev;
|
||||||
prev = curr;
|
prev = curr;
|
||||||
curr = next;
|
curr = next;
|
||||||
}
|
}
|
||||||
prevNode.next = prev;
|
//when curr.next==null, the current element is left without pointing it to its prev,so
|
||||||
return head;
|
if(curr != null){
|
||||||
|
curr.next = prev;
|
||||||
|
prev=curr;
|
||||||
|
}
|
||||||
|
//prev will be pointing to the last element in the Linkedlist, it will be the new head of the reversed linkedlist
|
||||||
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.thealgorithms.datastructures.lists;
|
package com.thealgorithms.datastructures.lists;
|
||||||
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -99,4 +100,64 @@ public class SinglyLinkedListTest {
|
|||||||
list.deleteNth(6); //Index 6 has value 7
|
list.deleteNth(6); //Index 6 has value 7
|
||||||
assertFalse(list.search(7));
|
assertFalse(list.search(7));
|
||||||
}
|
}
|
||||||
|
//Test to check whether the method reverseList() works fine
|
||||||
|
@Test
|
||||||
|
void reverseList(){
|
||||||
|
|
||||||
|
//Creating a new LinkedList of size:4
|
||||||
|
//The linkedlist will be 1->2->3->4->null
|
||||||
|
SinglyLinkedList list = createSampleList(4);
|
||||||
|
|
||||||
|
//Reversing the LinkedList using reverseList() method and storing the head of the reversed linkedlist in a head node
|
||||||
|
//The reversed linkedlist will be 4->3->2->1->null
|
||||||
|
Node head=list.reverseList(list.getHead());
|
||||||
|
|
||||||
|
//Recording the Nodes after reversing the LinkedList
|
||||||
|
Node firstNode = head; //4
|
||||||
|
Node secondNode = firstNode.next; //3
|
||||||
|
Node thirdNode = secondNode.next; //2
|
||||||
|
Node fourthNode = thirdNode.next; //1
|
||||||
|
|
||||||
|
//Checking whether the LinkedList is reversed or not by comparing the original list and reversed list nodes
|
||||||
|
assertEquals(1,fourthNode.value);
|
||||||
|
assertEquals(2,thirdNode.value);
|
||||||
|
assertEquals(3,secondNode.value);
|
||||||
|
assertEquals(4,firstNode.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Test to check whether implemented reverseList() method handles NullPointer Exception for TestCase where head==null
|
||||||
|
@Test
|
||||||
|
void reverseListNullPointer(){
|
||||||
|
//Creating a linkedlist with first node assigned to null
|
||||||
|
SinglyLinkedList list=new SinglyLinkedList();
|
||||||
|
Node first=list.getHead();
|
||||||
|
|
||||||
|
//Reversing the linkedlist
|
||||||
|
Node head=list.reverseList(first);
|
||||||
|
|
||||||
|
//checking whether the method works fine if the input is null
|
||||||
|
assertEquals(head,first);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Testing reverseList() method for a linkedlist of size: 20
|
||||||
|
@Test
|
||||||
|
void reverseListTest(){
|
||||||
|
//Creating a new linkedlist
|
||||||
|
SinglyLinkedList list = createSampleList(20);
|
||||||
|
|
||||||
|
//Reversing the LinkedList using reverseList() method and storing the head of the reversed linkedlist in a head node
|
||||||
|
Node head=list.reverseList(list.getHead());
|
||||||
|
|
||||||
|
//Storing the head in a temp variable, so that we cannot loose the track of head
|
||||||
|
Node temp=head;
|
||||||
|
|
||||||
|
int i=20; //This is for the comparison of values of nodes of the reversed linkedlist
|
||||||
|
//Checking whether the reverseList() method performed its task
|
||||||
|
while(temp!=null && i>0){
|
||||||
|
assertEquals(i,temp.value);
|
||||||
|
temp=temp.next;
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user