diff --git a/Data-Structures/Linked-List/ReverseSinglyLinkedList.js b/Data-Structures/Linked-List/ReverseSinglyLinkedList.js new file mode 100644 index 0000000000..db4e7ef6d6 --- /dev/null +++ b/Data-Structures/Linked-List/ReverseSinglyLinkedList.js @@ -0,0 +1,16 @@ +/** A LinkedList based solution to reverse a number +Problem Statement: Given a number such that each of its digit is stored in a singly linked list. Reverse the linked list and return the head of the linked list Link for the Problem: https://leetcode.com/problems/reverse-linked-list/ */ +class ReverseSinglyLinkedList { + solution (head) { + let prev = null + let next = null + while (head) { + next = head.next + head.next = prev + prev = head + head = next + } + return prev + }; +} +export { ReverseSinglyLinkedList } diff --git a/Data-Structures/Linked-List/SinglyLinkedList.js b/Data-Structures/Linked-List/SinglyLinkedList.js index d55e0b14b8..605ede4013 100644 --- a/Data-Structures/Linked-List/SinglyLinkedList.js +++ b/Data-Structures/Linked-List/SinglyLinkedList.js @@ -274,6 +274,20 @@ class LinkedList { log () { console.log(JSON.stringify(this.headNode, null, 2)) } + + // Method to reverse the LinkedList + reverse () { + let head = this.headNode + let prev = null + let next = null + while (head) { + next = head.next + head.next = prev + prev = head + head = next + } + this.headNode = prev + }; } export { Node, LinkedList } diff --git a/Data-Structures/Linked-List/test/ReverseSinglyLinkedList.test.js b/Data-Structures/Linked-List/test/ReverseSinglyLinkedList.test.js new file mode 100644 index 0000000000..847026db89 --- /dev/null +++ b/Data-Structures/Linked-List/test/ReverseSinglyLinkedList.test.js @@ -0,0 +1,14 @@ +import { ReverseSinglyLinkedList } from '../ReverseSinglyLinkedList' +import { Node } from '../SinglyLinkedList' +describe('ReverseSinglyLinkedList', () => { + it('Reverse a Number Represented as Linked List', () => { + const headNode = new Node(3) + headNode.next = new Node(4) + headNode.next.next = new Node(1) + const expected = new Node(1) + expected.next = new Node(4) + expected.next.next = new Node(3) + const reverseSinglyLinkedList = new ReverseSinglyLinkedList() + expect(reverseSinglyLinkedList.solution(headNode)).toEqual(expected) + }) +}) diff --git a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js index 764cac7aa9..a04d06ba15 100644 --- a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js +++ b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js @@ -247,4 +247,10 @@ describe('SinglyLinkedList', () => { headNode.rotateListRight(5) expect(headNode.get()).toEqual([20, 30, 40, 50, 10]) }) + + it('Reverse a Linked List', () => { + const list = new LinkedList([4, 3, 1]) + list.reverse() + expect(list.get()).toEqual([1, 3, 4]) + }) }) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy