```js
function reverse(head) {
  let prev = null;
  let node = head;
  while (node) {
    // Save next, so we can proceed to the next node in the original list
    // After reversing the pointer.
    const next = node.next;

    // Reverse the pointer to point back at the previous node.
    node.next = prev;

    // Shift pointers ahead
    prev = node;
    node = next;
  }
  return prev;
}
```
Explanation:

We use prev to track the previous node as we traverse the list
We save the next node first before overwriting node.next, otherwise we would lose the link and get stuck
By reversing the pointer and shifting ahead in one loop, this is an efficient O(n) solution
 ```ฟังก์ชัน js ย้อนกลับ (หัว) { ให้ก่อนหน้า = null; ให้โหนด = หัว; ในขณะที่ (โหนด) { // บันทึกถัดไป เพื่อให้เราสามารถไปยังโหนดถัดไปในรายการต้นฉบับ // หลังจากย้อนกลับตัวชี้ const ถัดไป = node.next; // ย้อนกลับตัวชี้เพื่อชี้กลับไปยังโหนดก่อนหน้า node.next = ก่อนหน้า; // เลื่อนตัวชี้ไปข้างหน้า ก่อนหน้า = โหนด; โหนด = ถัดไป; } กลับก่อนหน้า; } ``` คำอธิบาย: เราใช้ prev เพื่อติดตามโหนดก่อนหน้าในขณะที่เราสำรวจรายการ เราบันทึกโหนดถัดไปก่อนก่อนที่จะเขียนทับ node.next มิฉะนั้นเราจะสูญเสียลิงก์และติดขัด โดยการย้อนกลับตัวชี้และเลื่อนไปข้างหน้าในวงเดียว นี่คือโซลูชัน O(n) ที่มีประสิทธิภาพ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence