Triplets with a Target Sum in a Sorted Doubly Linked List
Sun Mar 24 2024
:
1class Node {
2  constructor(val) {
3    this.data = val;
4    this.next = null;
5    this.prev = null;
6  }
7}
8
9class DoublyLinkedList {
10  constructor(val) {
11    this.head = null;
12  }
13
14  addLast(val) {
15    const newNode = new Node(val);
16    if (!this.head) {
17      this.head = newNode;
18      return;
19    }
20    let current = this.head;
21    while (current.next) {
22      current = current.next;
23    }
24    current.next = newNode;
25    newNode.prev = current;
26  }
27  tripletSum(val) {
28    let current = this.head;
29
30    let currentBackward = this.head;
31    while (currentBackward.next) {
32      currentBackward = currentBackward.next;
33    }
34    let elem = [];
35    while (current.next.next) {
36      let currentForward = this.head.next;
37      while (currentForward.data < currentBackward.data) {
38        let sum = current.data + currentForward.data + currentBackward.data;
39        if (sum === val) {
40          elem = [
41            ...elem,
42            [current.data, currentForward.data, currentBackward.data],
43          ];
44          currentForward = currentForward.next;
45          currentBackward = currentBackward.prev;
46        } else if (sum > val) {
47          currentBackward = currentBackward.prev;
48        } else {
49          currentForward = currentForward.next;
50        }
51      }
52      current = current.next;
53    }
54    return elem;
55  }
56}
57const linkedList = new DoublyLinkedList();
58linkedList.addLast(1);
59linkedList.addLast(2);
60linkedList.addLast(4);
61linkedList.addLast(5);
62linkedList.addLast(6);
63linkedList.addLast(7);
64linkedList.addLast(8);
65linkedList.addLast(9);
66
67console.log(linkedList.tripletSum(17));
68