ਲਿੰਕਡ ਸੂਚੀਆਂ ਵਿੱਚ ਨੋਡ ਮਿਟਾਉਣ ਦੀ ਚੁਣੌਤੀ ਨੂੰ ਸਮਝਣਾ
ਨਾਲ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ ਲਿੰਕਡ ਸੂਚੀਆਂ JavaScript ਵਿੱਚ ਕਈ ਵਾਰ ਅਚਾਨਕ ਨਤੀਜੇ ਲਿਆ ਸਕਦੇ ਹਨ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਖਾਸ ਨੋਡਸ ਨੂੰ ਸੋਧਦੇ ਹੋਏ। ਇੱਕ ਆਮ ਦ੍ਰਿਸ਼ ਡਿਵੈਲਪਰ ਦਾ ਸਾਹਮਣਾ ਇੱਕ ਨੋਡ ਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਬਦਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ null ਇੱਕ ਵਿੱਚ ਲਿੰਕਡਲਿਸਟ, ਪਰ ਇਹ ਪਤਾ ਲਗਾਉਣਾ ਕਿ ਅਸਲ ਸੂਚੀ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਹੁੰਦੀ ਹੈ।
ਸੂਚੀ ਵਿੱਚ ਮੱਧ ਨੋਡਾਂ ਨਾਲ ਨਜਿੱਠਣ ਵੇਲੇ ਇਹ ਮੁੱਦਾ ਅਕਸਰ ਪੈਦਾ ਹੁੰਦਾ ਹੈ. ਉਦਾਹਰਨ ਲਈ, ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਾਲ ਸੂਚੀ ਨੂੰ ਪਾਰ ਕਰ ਰਹੇ ਹੋ ਹੌਲੀ ਅਤੇ ਤੇਜ਼ ਪੁਆਇੰਟਰ ਮਿਡਲ ਨੋਡ, ਅਸਾਈਨਿੰਗ ਲੱਭਣ ਲਈ ਤਕਨੀਕ ਹੌਲੀ = ਖਾਲੀ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਅਨੁਮਾਨਿਤ ਨਤੀਜਾ ਨਾ ਦੇਵੇ, ਖਾਸ ਕਰਕੇ ਜੇਕਰ ਹੌਲੀ ਪੁਆਇੰਟਰ ਸੂਚੀ ਦੇ ਅੰਤ ਤੱਕ ਪਹੁੰਚਦਾ ਹੈ।
ਕੋਡ ਉਦਾਹਰਨ ਵਿੱਚ ਤੁਸੀਂ ਹੇਠਾਂ ਦੇਖੋਗੇ, ਭਾਵੇਂ ਅਸੀਂ ਮੱਧ ਨੋਡ ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਸੂਚੀ ਬਣਤਰ ਵਿੱਚ ਕੋਈ ਬਦਲਾਅ ਨਹੀਂ ਹੁੰਦਾ। ਇੱਥੇ ਮੁੱਖ ਸਵਾਲ ਇਹ ਹੈ ਕਿ ਇੱਕ ਨੋਡ ਨੂੰ ਰੱਦ ਕਰਨ ਲਈ ਸੈੱਟ ਕਰਨਾ ਸੂਚੀ ਢਾਂਚੇ ਨੂੰ ਕਿਉਂ ਨਹੀਂ ਬਦਲਦਾ ਹੈ, ਅਤੇ ਇਸ ਮੁੱਦੇ ਨੂੰ ਕਿਵੇਂ ਸੰਸ਼ੋਧਿਤ ਕਰਨ ਲਈ ਸਹੀ ਢੰਗ ਨਾਲ ਹੱਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ. ਲਿੰਕਡਲਿਸਟ?
ਇਸ ਲੇਖ ਵਿੱਚ, ਅਸੀਂ ਇਸ ਸਮੱਸਿਆ ਦੀ ਡੂੰਘਾਈ ਵਿੱਚ ਪੜਚੋਲ ਕਰਾਂਗੇ, ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਹਵਾਲਿਆਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦੀ ਹੈ ਦੇ ਮਕੈਨਿਕਸ ਨੂੰ ਤੋੜਾਂਗੇ, ਅਤੇ ਇੱਕ ਲਿੰਕਡ ਸੂਚੀ ਵਿੱਚ ਨੋਡਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸੋਧਣ ਲਈ ਹੱਲਾਂ ਬਾਰੇ ਚਰਚਾ ਕਰਾਂਗੇ। ਇਸ ਨੂੰ ਸਮਝਣ ਨਾਲ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਕੰਮ ਕਰਨ ਵੇਲੇ ਸਮਾਨ ਸਮੱਸਿਆਵਾਂ ਤੋਂ ਬਚਣ ਵਿੱਚ ਮਦਦ ਮਿਲੇਗੀ ਲਿੰਕ ਕੀਤੀਆਂ ਸੂਚੀਆਂ.
JavaScript ਲਿੰਕਡ ਸੂਚੀਆਂ ਵਿੱਚ ਨੋਡ ਸੋਧ ਨੂੰ ਫਿਕਸ ਕਰਨਾ: ਇੱਕ ਵਿਸਤ੍ਰਿਤ ਗਾਈਡ
ਇਹ ਹੱਲ ਇੱਕ ਲਿੰਕਡ ਸੂਚੀ ਵਿੱਚ ਨੋਡਾਂ ਨੂੰ ਸੰਸ਼ੋਧਿਤ ਕਰਨ ਲਈ ਵਨੀਲਾ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਅਤੇ ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਮੱਧ ਨੋਡ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕਿਵੇਂ ਮਿਟਾਉਣਾ ਹੈ। ਇਸ ਵਿੱਚ ਗਲਤੀ ਹੈਂਡਲਿੰਗ ਅਤੇ ਇਨਪੁਟ ਪ੍ਰਮਾਣਿਕਤਾ ਵੀ ਸ਼ਾਮਲ ਹੈ।
class ListNode {
constructor(val = 0, next = null) {
this.val = val;
this.next = next;
}
}
function deleteMiddle(head) {
if (!head || !head.next) return null; // Handle edge case when list is empty or has only one element
let slow = head;
let fast = head;
let prev = null;
// Traverse with two pointers (slow and fast)
while (fast && fast.next) {
prev = slow;
slow = slow.next;
fast = fast.next.next;
}
// Delete middle node by skipping over it
prev.next = slow.next;
return head;
}
// Helper function to print list
function printList(head) {
let current = head;
while (current) {
console.log(current.val);
current = current.next;
}
}
// Example usage
let a = new ListNode(1);
let b = new ListNode(2);
let c = new ListNode(3);
let d = new ListNode(4);
let e = new ListNode(5);
a.next = b;
b.next = c;
c.next = d;
d.next = e;
console.log("Before Deletion:");
printList(a);
deleteMiddle(a);
console.log("After Deletion:");
printList(a);
ਵਿਕਲਪਕ ਪਹੁੰਚ: ਇਸ ਨੂੰ ਹਟਾਉਣ ਦੀ ਬਜਾਏ ਨੋਡ ਦੇ ਮੁੱਲ ਨੂੰ ਸੋਧਣਾ
ਇਹ ਪਹੁੰਚ ਇੱਕ ਆਮ ਚਾਲ ਦਾ ਲਾਭ ਉਠਾਉਂਦੀ ਹੈ ਜਿੱਥੇ ਮੱਧ ਨੋਡ ਦੇ ਮੁੱਲ ਨੂੰ ਅਗਲੇ ਨੋਡ ਦੇ ਮੁੱਲ ਨਾਲ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਫਿਰ ਅਗਲਾ ਨੋਡ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਪਿਛਲੇ ਨੋਡ ਨੂੰ ਟਰੈਕ ਕਰਨ ਤੋਂ ਬਚਦਾ ਹੈ।
function deleteMiddleAlternative(head) {
if (!head || !head.next) return null; // Handle edge case for single node list
let slow = head;
let fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
}
// Replace value of the slow pointer with the next node's value
if (slow.next) {
slow.val = slow.next.val;
slow.next = slow.next.next;
}
return head;
}
// Example usage
let x = new ListNode(1);
let y = new ListNode(2);
let z = new ListNode(3);
x.next = y;
y.next = z;
console.log("Before Deletion (Alternative):");
printList(x);
deleteMiddleAlternative(x);
console.log("After Deletion (Alternative):");
printList(x);
ਲਿੰਕਡ ਸੂਚੀਆਂ ਵਿੱਚ ਵਸਤੂ ਸੰਦਰਭਾਂ ਅਤੇ ਉਹਨਾਂ ਦੇ ਪ੍ਰਭਾਵ ਦੀ ਪੜਚੋਲ ਕਰਨਾ
ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਸਮਝਣ ਲਈ ਬੁਨਿਆਦੀ ਪਹਿਲੂਆਂ ਵਿੱਚੋਂ ਇੱਕ ਲਿੰਕਡ ਸੂਚੀਆਂ JavaScript ਵਿੱਚ ਆਬਜੈਕਟ ਰੈਫਰੈਂਸ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਲਿੰਕਡ ਸੂਚੀ ਵਿੱਚ ਇੱਕ ਨੋਡ ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ JavaScript ਇਸਨੂੰ ਇੱਕ ਵਸਤੂ ਦੇ ਰੂਪ ਵਿੱਚ ਸੰਭਾਲਦਾ ਹੈ। ਸੂਚੀ ਲਾਜ਼ਮੀ ਤੌਰ 'ਤੇ ਜੁੜੇ ਨੋਡਾਂ ਦੀ ਇੱਕ ਲੜੀ ਹੈ ਜਿੱਥੇ ਹਰੇਕ ਨੋਡ ਅਗਲੇ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਇੱਕ ਵੇਰੀਏਬਲ ਨੂੰ ਬਦਲਣਾ ਜੋ ਇੱਕ ਨੋਡ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਸੈਟਿੰਗ b = null, ਸਿਰਫ ਵੇਰੀਏਬਲ ਦੇ ਸੰਦਰਭ ਨੂੰ ਬਦਲਦਾ ਹੈ, ਵਸਤੂ ਨੂੰ ਨਹੀਂ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਅਸਲ ਸੂਚੀ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਰਹਿੰਦੀ।
ਸੂਚੀ ਵਿੱਚ ਇੱਕ ਨੋਡ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਮਿਟਾਉਣ ਜਾਂ ਸੋਧਣ ਲਈ, ਇਸਨੂੰ ਬਦਲਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ ਅਗਲਾ ਪਿਛਲੇ ਨੋਡ ਦਾ ਪੁਆਇੰਟਰ, ਇਸ ਤਰ੍ਹਾਂ ਨੋਡ ਨੂੰ ਛੱਡ ਕੇ ਤੁਸੀਂ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ। JavaScript ਵਿੱਚ, ਵਸਤੂਆਂ ਨੂੰ ਹਵਾਲੇ ਦੁਆਰਾ ਪਾਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜੋ ਇਹ ਦੱਸਦਾ ਹੈ ਕਿ ਸਿਰਫ਼ ਇੱਕ ਨੋਡ ਨੂੰ ਮੁੜ-ਸਾਈਨ ਕਿਉਂ ਕਰਨਾ ਹੈ null ਲਿੰਕਡ ਸੂਚੀ ਢਾਂਚੇ ਨੂੰ ਨਹੀਂ ਬਦਲਦਾ। ਇਸ ਦੀ ਬਜਾਏ, ਤੁਹਾਨੂੰ ਇੱਕ ਖਾਸ ਨੋਡ ਨੂੰ ਹਟਾਉਣ ਲਈ ਨੋਡਾਂ ਦੇ ਵਿਚਕਾਰ ਪੁਆਇੰਟਰਾਂ ਨੂੰ ਹੇਰਾਫੇਰੀ ਕਰਨ ਦੀ ਲੋੜ ਹੈ.
ਨਾਲ ਨਜਿੱਠਣ ਵੇਲੇ ਇਹ ਧਾਰਨਾ ਜ਼ਰੂਰੀ ਹੈ ਨੋਡ ਮਿਟਾਉਣਾ ਵਧੇਰੇ ਗੁੰਝਲਦਾਰ ਦ੍ਰਿਸ਼ਾਂ ਵਿੱਚ, ਜਿਵੇਂ ਕਿ ਲਿੰਕਡ ਸੂਚੀ ਦੇ ਮੱਧ ਤੋਂ ਇੱਕ ਨੋਡ ਨੂੰ ਮਿਟਾਉਣਾ। ਹੌਲੀ ਅਤੇ ਤੇਜ਼ ਪੁਆਇੰਟਰ ਤਕਨੀਕ, ਸਹੀ ਪੁਆਇੰਟਰ ਹੇਰਾਫੇਰੀ ਦੇ ਨਾਲ, ਸਾਨੂੰ ਮਿਡਲ ਨੋਡ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਲੱਭਣ ਅਤੇ ਮਿਟਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਇਹ ਖਾਸ ਤੌਰ 'ਤੇ ਵੱਡੇ ਡੇਟਾ ਸੈੱਟਾਂ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਹੈ ਜਿੱਥੇ ਤੁਹਾਨੂੰ ਸਮਾਂ ਅਤੇ ਸਪੇਸ ਦੀ ਗੁੰਝਲਤਾ ਦੋਵਾਂ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
ਲਿੰਕਡ ਸੂਚੀ ਨੋਡ ਸੋਧ ਬਾਰੇ ਆਮ ਸਵਾਲ
- ਕੀ ਕਰਨ ਲਈ ਇੱਕ ਨੋਡ ਸੈੱਟ ਕਰਦਾ ਹੈ null ਇੱਕ ਲਿੰਕ ਕੀਤੀ ਸੂਚੀ ਵਿੱਚ ਕਰਦੇ ਹੋ?
- ਲਈ ਇੱਕ ਨੋਡ ਸੈੱਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ null ਸਿਰਫ਼ ਉਸ ਵੇਰੀਏਬਲ ਵਿੱਚ ਹਵਾਲਾ ਬਦਲਦਾ ਹੈ, ਪਰ ਇਹ ਮੂਲ ਸੂਚੀ ਢਾਂਚੇ ਨੂੰ ਨਹੀਂ ਬਦਲਦਾ।
- ਕਿਉਂ ਨਹੀਂ b = null ਉਦਾਹਰਨ ਵਿੱਚ ਸੂਚੀ ਨੂੰ ਸੋਧੋ?
- ਜਦੋਂ ਤੁਸੀਂ ਕਰਦੇ ਹੋ b = null, ਇਹ ਸਿਰਫ਼ ਲਈ ਹਵਾਲਾ ਬਦਲਦਾ ਹੈ b, ਨਾ next ਪੁਆਇੰਟਰ ਜੋ ਲਿੰਕਡ ਸੂਚੀ ਵਿੱਚ ਨੋਡਾਂ ਨੂੰ ਜੋੜਦਾ ਹੈ।
- ਤੁਸੀਂ ਲਿੰਕਡ ਸੂਚੀ ਵਿੱਚ ਇੱਕ ਮਿਡਲ ਨੋਡ ਨੂੰ ਕਿਵੇਂ ਮਿਟਾਉਂਦੇ ਹੋ?
- ਤੁਸੀਂ ਜਾਂ ਤਾਂ ਨੋਡ ਦੇ ਮੁੱਲ ਨੂੰ ਅਗਲੇ ਨੋਡ ਦੇ ਮੁੱਲ ਨਾਲ ਬਦਲ ਸਕਦੇ ਹੋ slow.val = slow.next.val ਅਤੇ ਅੱਪਡੇਟ ਕਰਕੇ ਅਗਲੇ ਨੋਡ ਨੂੰ ਛੱਡੋ next ਪੁਆਇੰਟਰ
- ਲਿੰਕਡ ਸੂਚੀ ਵਿੱਚ ਦੋ-ਪੁਆਇੰਟਰ ਤਕਨੀਕ ਕੀ ਹੈ?
- ਇਹ ਇੱਕ ਆਮ ਪਹੁੰਚ ਹੈ ਜਿੱਥੇ ਇੱਕ ਪੁਆਇੰਟਰ (ਤੇਜ਼) ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਦੋ ਕਦਮ ਅੱਗੇ ਵਧਦਾ ਹੈ ਅਤੇ ਦੂਜਾ (ਹੌਲੀ) ਮੱਧ ਨੋਡ ਨੂੰ ਲੱਭਣ ਲਈ ਇੱਕ ਕਦਮ ਵਧਾਉਂਦਾ ਹੈ।
- ਕਿਉਂ ਹੈ prev.next = slow.next ਨੋਡ ਮਿਟਾਉਣ ਵਿੱਚ ਕਮਾਂਡ ਜ਼ਰੂਰੀ ਹੈ?
- ਇਹ ਕਮਾਂਡ ਪਿਛਲੇ ਨੋਡ ਦੇ ਪੁਆਇੰਟਰ ਨੂੰ ਮੱਧ ਨੋਡ 'ਤੇ ਛੱਡਣ ਲਈ ਅੱਪਡੇਟ ਕਰਦੀ ਹੈ, ਇਸ ਨੂੰ ਸੂਚੀ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਮਿਟਾਉਂਦੀ ਹੈ।
ਲਿੰਕਡ ਸੂਚੀਆਂ ਵਿੱਚ ਨੋਡ ਮਿਟਾਉਣ ਬਾਰੇ ਅੰਤਿਮ ਵਿਚਾਰ
JavaScript ਵਿੱਚ ਲਿੰਕ ਕੀਤੀਆਂ ਸੂਚੀਆਂ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਅਕਸਰ ਇਹ ਸਮਝਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਕਿ ਆਬਜੈਕਟ ਹਵਾਲੇ ਅਤੇ ਪੁਆਇੰਟਰ ਕਿਵੇਂ ਪਰਸਪਰ ਪ੍ਰਭਾਵ ਪਾਉਂਦੇ ਹਨ। ਬਸ ਇੱਕ ਨੋਡ ਨੂੰ null ਤੇ ਸੈਟ ਕਰਨ ਨਾਲ ਇਸਨੂੰ ਸੂਚੀ ਵਿੱਚੋਂ ਨਹੀਂ ਹਟਾਇਆ ਜਾਵੇਗਾ; ਤੁਹਾਨੂੰ ਨੋਡਾਂ ਨੂੰ ਮਿਟਾਉਣ ਲਈ ਪੁਆਇੰਟਰ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਅੱਪਡੇਟ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ। ਮੱਧ ਨੋਡਾਂ ਨਾਲ ਨਜਿੱਠਣ ਵੇਲੇ ਇਹ ਖਾਸ ਤੌਰ 'ਤੇ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ.
ਹੌਲੀ ਅਤੇ ਤੇਜ਼ ਪੁਆਇੰਟਰ ਤਕਨੀਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਧਿਆਨ ਨਾਲ ਪੁਆਇੰਟਰ ਹੇਰਾਫੇਰੀ ਦੇ ਨਾਲ, ਤੁਸੀਂ ਸੂਚੀ ਵਿੱਚੋਂ ਇੱਕ ਨੋਡ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਮਿਟਾ ਸਕਦੇ ਹੋ। ਇਹਨਾਂ ਤਕਨੀਕਾਂ ਵਿੱਚ ਮੁਹਾਰਤ ਹਾਸਲ ਕਰਨਾ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਅਣਕਿਆਸੇ ਨਤੀਜਿਆਂ ਤੋਂ ਬਿਨਾਂ ਲਿੰਕਡ ਸੂਚੀਆਂ ਵਿੱਚ ਨੋਡ ਮਿਟਾਉਣ ਨੂੰ ਸੰਭਾਲ ਸਕਦੇ ਹੋ, ਜੋ ਕਿ ਐਲਗੋਰਿਦਮਿਕ ਸਮੱਸਿਆ-ਹੱਲ ਕਰਨ ਵਿੱਚ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਹੁਨਰ ਹੈ।
JavaScript ਵਿੱਚ ਲਿੰਕਡ ਸੂਚੀ ਨੋਡ ਮਿਟਾਉਣ ਲਈ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਲਿੰਕਡ ਲਿਸਟ ਓਪਰੇਸ਼ਨਾਂ ਲਈ ਵਰਤੀ ਜਾਂਦੀ JavaScript ਵਿੱਚ ਵਸਤੂ ਸੰਦਰਭਾਂ ਦੀ ਵਿਸਤ੍ਰਿਤ ਵਿਆਖਿਆ: MDN ਵੈੱਬ ਡੌਕਸ
- ਲਿੰਕਡ ਲਿਸਟ ਟ੍ਰਾਵਰਸਲ ਅਤੇ ਨੋਡ ਮਿਟਾਉਣ ਲਈ ਦੋ-ਪੁਆਇੰਟਰ ਤਕਨੀਕ: GeeksforGeeks
- ਇਹ ਸਮਝਣਾ ਕਿ ਕਿਵੇਂ JavaScript ਲਿੰਕ ਕੀਤੀਆਂ ਸੂਚੀਆਂ ਅਤੇ ਨੋਡਾਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ: JavaScript ਜਾਣਕਾਰੀ