การดู : 0

12/04/2026 18:16น.

JS2GO EP.32 การใช้งาน Linked Lists ใน Go เทียบกับ JavaScript

JS2GO EP.32 การใช้งาน Linked Lists ใน Go เทียบกับ JavaScript

#JS2GO

#Data Structure

#Go

#JavaScript

#Linked List

Linked List คือโครงสร้างข้อมูล (Data Structure) แบบ Dynamic ที่ใช้เก็บข้อมูลโดยแต่ละ Node จะเชื่อมโยง (link) กันผ่าน pointer หรือ reference ช่วยให้สามารถ แทรก (insert) หรือ ลบ (delete) ข้อมูลได้อย่างรวดเร็วกว่า Array ในหลายกรณี

 

ในบทความนี้ เราจะเรียนรู้วิธีสร้างและใช้งาน Linked List ใน JavaScript และ Go พร้อมตัวอย่างโค้ดจริงและแนวทางปฏิบัติที่เหมาะสมสำหรับการใช้งานในโปรเจกต์จริง 🚀

 

1. แนวคิดของ Linked List

 

Linked List ประกอบด้วยองค์ประกอบหลัก 3 ส่วน:

  • Node: เก็บข้อมูล (data) และ pointer/reference ไปยัง node ถัดไป
  • Head: Node แรกของ list
  • Tail: Node สุดท้ายที่ pointer จะชี้ไปที่ null หรือ nil

 

ประเภทของ Linked List

  • Singly Linked List: เชื่อมโยงไปข้างหน้าเพียงทิศทางเดียว
  • Doubly Linked List: เชื่อมโยงได้ทั้งข้างหน้าและข้างหลัง

 

2. การใช้งาน Linked List ใน JavaScript

 

ใน JavaScript ไม่มีโครงสร้าง Linked List แบบ built-in แต่สามารถสร้างเองได้ง่ายด้วย class

 

🔹 ตัวอย่าง: Singly Linked List

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
  }

  append(value) {
    const newNode = new Node(value);
    if (!this.head) {
      this.head = newNode;
      return;
    }
    let current = this.head;
    while (current.next) {
      current = current.next;
    }
    current.next = newNode;
  }

  print() {
    let current = this.head;
    while (current) {
      console.log(current.value);
      current = current.next;
    }
  }
}

// ทดสอบ
const list = new LinkedList();
list.append(10);
list.append(20);
list.append(30);
list.print();

 

ผลลัพธ์:

10
20
30

 

ข้อดี JavaScript:
✔️ ใช้ class เขียนง่ายและเข้าใจได้ชัดเจน
✔️ โครงสร้าง Dynamic ปรับขนาดได้อัตโนมัติ
✔️ เหมาะกับงานที่ต้องเพิ่ม/ลบข้อมูลบ่อย

 

ข้อจำกัด:
⚠️ ไม่มี type checking
⚠️ ไม่มีโครงสร้าง Linked List มาตรฐานในภาษา

 

3. การใช้งาน Linked List ใน Go

 

Go มี package มาตรฐานชื่อว่า container/list สำหรับการใช้งาน Linked List ได้โดยตรง

 

🔹 ตัวอย่าง: ใช้ container/list

package main

import (
    "container/list"
    "fmt"
)

func main() {
    linkedList := list.New()
    linkedList.PushBack(10)
    linkedList.PushBack(20)
    linkedList.PushBack(30)

    for e := linkedList.Front(); e != nil; e = e.Next() {
        fmt.Println(e.Value)
    }
}

 

ผลลัพธ์:

10
20
30

 

🔹 สร้าง Linked List เองแบบ Custom

package main

import "fmt"

type Node struct {
    Value int
    Next  *Node
}

type LinkedList struct {
    Head *Node
}

func (l *LinkedList) Append(value int) {
    newNode := &Node{Value: value}
    if l.Head == nil {
        l.Head = newNode
        return
    }
    current := l.Head
    for current.Next != nil {
        current = current.Next
    }
    current.Next = newNode
}

func (l *LinkedList) Print() {
    current := l.Head
    for current != nil {
        fmt.Println(current.Value)
        current = current.Next
    }
}

func main() {
    list := LinkedList{}
    list.Append(10)
    list.Append(20)
    list.Append(30)
    list.Print()
}

 

ข้อดี Go:
✔️ Type-safe และมี package มาตรฐานให้ใช้งานได้ทันที
✔️ ทำงานได้รวดเร็วและใช้หน่วยความจำมีประสิทธิภาพสูง
✔️ เหมาะกับระบบขนาดใหญ่หรือ backend ที่ต้องการ performance

 

ข้อจำกัด:
⚠️ Syntax ยาวกว่าภาษา JavaScript
⚠️ ต้องจัดการ pointer เอง

 

4. แนวทางปฏิบัติที่เหมาะสม (Best Practices)

 

✔️ ใช้ Linked List เมื่อต้อง insert/delete บ่อย เช่น Queue, Stack, หรือระบบ Scheduling
✔️ หลีกเลี่ยงการใช้ในงานที่ต้อง Random Access เนื่องจากต้อง traversal ผ่านทุก node
✔️ ใน Go ใช้ container/list ถ้าไม่ต้องการ implement เอง
✔️ ใน JavaScript ใช้ class เพื่อความชัดเจนและ modular

 

5. สรุปเปรียบเทียบ JavaScript vs Go

 

FeatureJavaScriptGo
StructureCustom classBuilt-in (container/list)
Type SafetyDynamicStrongly typed
PerformanceModerateHigh efficiency
ImplementationManual (class)Built-in or manual
Best Use CaseLightweight data manipulationHigh-performance systems

 

คำแนะนำ

 

💡 Frontend / App-level logic: ใช้ JavaScript class เพื่อความยืดหยุ่น
⚙️ Backend / High-performance systems: ใช้ Go’s container/list หรือ implement เองเพื่อความเร็วสูงสุด

 


 

ตอนต่อไป

 

ใน EP.33 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้ 👉 “การใช้งาน Trees และ Graphs ใน Go และ JavaScript” เพื่อเข้าใจโครงสร้างข้อมูลขั้นสูงที่ใช้ในระบบจริง เช่น Social Graphs, File Systems, และ Search Algorithms 🌳

 

อ่านบทความ Series อื่นๆ

🔵 Facebook: https://www.facebook.com/superdev.academy.th

🔴 YouTube : Superdev Academy

📸 Instagram: Superdev Academy

🎬 TikTok: https://www.tiktok.com/@superdevacademy?lang=th-TH

🌐 Website: https://www.superdevacademy.com/