Fix NullPointer Exception (#4142)

This commit is contained in:
Akshith121 2023-04-15 13:40:39 +05:30 committed by GitHub
parent 0c618b5ee8
commit 1ce907625b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 74 additions and 10 deletions

View File

@ -122,20 +122,23 @@ public class SinglyLinkedList extends Node {
* Reverse a singly linked list from a given node till the end
*
*/
Node reverseList(Node node) {
Node prevNode = head;
while (prevNode.next != node) {
prevNode = prevNode.next;
}
Node prev = null, curr = node, next;
while (curr != null) {
next = curr.next;
public Node reverseList(Node node) {
Node prev = null;
Node curr = node;
while (curr != null && curr.next != null) {
Node next=curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
prevNode.next = prev;
return head;
//when curr.next==null, the current element is left without pointing it to its prev,so
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;
}
/**

View File

@ -1,5 +1,6 @@
package com.thealgorithms.datastructures.lists;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
@ -99,4 +100,64 @@ public class SinglyLinkedListTest {
list.deleteNth(6); //Index 6 has value 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--;
}
}
}