From 8194068395e8788d418e7567979809252dd454fa Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 29 Oct 2022 16:49:24 +0530 Subject: [PATCH 1/4] Fix: Reverse Singly Linked List --- .../Linked-List/ReverseSinglyLinkedList.js | 16 ++++++++++++++++ .../test/ReverseSinglyLinkedList.test.js | 14 ++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 Data-Structures/Linked-List/ReverseSinglyLinkedList.js create mode 100644 Data-Structures/Linked-List/test/ReverseSinglyLinkedList.test.js 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/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) + }) +}) From ba12a8a44ea01a287d7dc48692a3f51a5f66873a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 29 Oct 2022 20:22:11 +0530 Subject: [PATCH 2/4] Added reverse in SinglyLinkedList --- Data-Structures/Linked-List/SinglyLinkedList.js | 14 ++++++++++++++ .../Linked-List/test/SinglyLinkedList.test.js | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/Data-Structures/Linked-List/SinglyLinkedList.js b/Data-Structures/Linked-List/SinglyLinkedList.js index d55e0b14b8..c6a3ebc73d 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 where each node contains a single integer value + reverseList () { + 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/SinglyLinkedList.test.js b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js index 764cac7aa9..68a73135bf 100644 --- a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js +++ b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js @@ -247,4 +247,12 @@ describe('SinglyLinkedList', () => { headNode.rotateListRight(5) expect(headNode.get()).toEqual([20, 30, 40, 50, 10]) }) + + it('Reverse a number represented as a Linked List where each node has a single integer', () => { + const headNode = new LinkedList([4, 3, 1]) + headNode.reverseList() + expect(headNode.get()).toEqual([1, 3, 4]) + + }) + }) From 3afca79759322ec0091a0c25854847c81514f429 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 29 Oct 2022 20:22:29 +0530 Subject: [PATCH 3/4] Added reverse in SinglyLinkedList --- Data-Structures/Linked-List/test/SinglyLinkedList.test.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js index 68a73135bf..7c7bb10eba 100644 --- a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js +++ b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js @@ -252,7 +252,5 @@ describe('SinglyLinkedList', () => { const headNode = new LinkedList([4, 3, 1]) headNode.reverseList() expect(headNode.get()).toEqual([1, 3, 4]) - }) - }) From 3691294f0833bb5734d73467fd896fb91057ad47 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 29 Oct 2022 22:40:08 +0530 Subject: [PATCH 4/4] Changes made --- Data-Structures/Linked-List/SinglyLinkedList.js | 4 ++-- Data-Structures/Linked-List/test/SinglyLinkedList.test.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Data-Structures/Linked-List/SinglyLinkedList.js b/Data-Structures/Linked-List/SinglyLinkedList.js index c6a3ebc73d..605ede4013 100644 --- a/Data-Structures/Linked-List/SinglyLinkedList.js +++ b/Data-Structures/Linked-List/SinglyLinkedList.js @@ -275,8 +275,8 @@ class LinkedList { console.log(JSON.stringify(this.headNode, null, 2)) } - // Method to reverse the LinkedList where each node contains a single integer value - reverseList () { + // Method to reverse the LinkedList + reverse () { let head = this.headNode let prev = null let next = null diff --git a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js index 7c7bb10eba..a04d06ba15 100644 --- a/Data-Structures/Linked-List/test/SinglyLinkedList.test.js +++ b/Data-Structures/Linked-List/test/SinglyLinkedList.test.js @@ -248,9 +248,9 @@ describe('SinglyLinkedList', () => { expect(headNode.get()).toEqual([20, 30, 40, 50, 10]) }) - it('Reverse a number represented as a Linked List where each node has a single integer', () => { - const headNode = new LinkedList([4, 3, 1]) - headNode.reverseList() - expect(headNode.get()).toEqual([1, 3, 4]) + it('Reverse a Linked List', () => { + const list = new LinkedList([4, 3, 1]) + list.reverse() + expect(list.get()).toEqual([1, 3, 4]) }) })