40 คำถามและคำตอบสัมภาษณ์เกี่ยวกับ Linked List ยอดนิยม (2026)

คำถามและคำตอบสัมภาษณ์ยอดนิยม (มีลิงก์ไปยังคำถามและคำตอบ)

การเตรียมตัวสำหรับการสัมภาษณ์งานด้านโครงสร้างข้อมูลนั้นจำเป็นต้องมุ่งเน้นไปที่ความท้าทาย คำถามสัมภาษณ์เกี่ยวกับ Linked List จะเผยให้เห็นถึงความสามารถในการแก้ปัญหาอย่างลึกซึ้ง ตรรกะของตัวชี้ ความเข้าใจเรื่องหน่วยความจำ และวิธีที่ผู้สมัครใช้เหตุผลในการแก้ปัญหาในกรณีพิเศษต่างๆ

การเชี่ยวชาญโครงสร้างข้อมูลแบบ Linked List จะเปิดโอกาสในการทำงานในทีมพัฒนาผลิตภัณฑ์ แพลตฟอร์ม และวิศวกรรมระบบ การได้รับประสบการณ์จริงจะช่วยสร้างความเชี่ยวชาญทางเทคนิคที่แข็งแกร่ง การคิดวิเคราะห์ และนิสัยการเขียนโค้ดที่ดี ทักษะนี้ช่วยสนับสนุนการทำงานตั้งแต่ระดับเริ่มต้นจนถึงระดับมืออาชีพอาวุโส ทั้งการแก้ไขข้อผิดพลาด การวิเคราะห์ประสิทธิภาพ การให้คำแนะนำแก่ผู้ใต้บังคับบัญชา และการทำงานร่วมกับผู้จัดการในการสร้างโซลูชันที่ปรับขนาดได้โดยใช้แนวคิดขั้นสูงจากประสบการณ์
อ่านเพิ่มเติม ...

👉 ดาวน์โหลดไฟล์ PDF ฟรี: คำถามและคำตอบสำหรับการสัมภาษณ์เกี่ยวกับโครงสร้างข้อมูลแบบ Linked List

คำถามและคำตอบสัมภาษณ์ยอดนิยม (มีลิงก์ไปยังคำถามและคำตอบ)

1) อธิบายว่า Linked List คืออะไร และแตกต่างจาก Array อย่างไร

A รายการที่เชื่อมโยง ลิงก์ลิสต์เป็นโครงสร้างข้อมูลเชิงเส้นที่องค์ประกอบซึ่งเรียกว่าโหนดเชื่อมต่อกันโดยใช้ตัวชี้หรือการอ้างอิง แต่ละโหนดประกอบด้วยข้อมูลและตัวชี้/การอ้างอิงไปยังโหนดถัดไปในรายการ แตกต่างจากอาร์เรย์ ลิงก์ลิสต์ไม่ได้จัดเก็บองค์ประกอบในหน่วยความจำที่ต่อเนื่องกัน

ความแตกต่างที่สำคัญระหว่างลิสต์เชื่อมโยงและอาร์เรย์:

ลักษณะ รายการที่เชื่อมโยง แถว
การจัดสรรหน่วยความจำ พลวัต คงที่
เวลาเข้าถึงองค์ประกอบ O (n) O (1)
การแทรก/การลบ มีประสิทธิภาพ (ไม่ว่าจะอยู่ในตำแหน่งใด) มีราคาแพง (ต้องมีการเคลื่อนย้าย)
โอเวอร์เฮดหน่วยความจำ พื้นที่เพิ่มเติมสำหรับตัวชี้ ไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับตัวชี้

โดยสรุปแล้ว ลิสต์แบบเชื่อมโยงมีข้อดีคือ การแทรกข้อมูลเร็วขึ้นและการปรับขนาดแบบไดนามิก แต่ข้อเสียคือ การเข้าถึงข้อมูลแบบสุ่มช้าลง และต้องใช้หน่วยความจำเพิ่มขึ้นเนื่องจากตัวชี้


2) ลิงก์ลิสต์มีกี่ประเภท?

มี รายการเชื่อมโยงหลายประเภทและผู้สัมภาษณ์มักขอให้คุณแยกแยะความแตกต่างระหว่างสิ่งเหล่านี้:

  • รายการเชื่อมโยงเดี่ยว: แต่ละโหนดจะชี้ไปยังโหนดถัดไปเท่านั้น
  • รายการที่เชื่อมโยงทวีคูณ: โหนดมี สองพอยเตอร์: หนึ่งไปยังโหนดถัดไป และหนึ่งไปยังโหนดก่อนหน้า
  • รายการเชื่อมโยงแบบวงกลม: โหนดสุดท้ายชี้กลับไปยังโหนดแรก ทำให้เกิดเป็นวงวน
  • รายการเชื่อมโยงแบบวงกลมสองทาง: เป็นการผสมผสานระหว่างลิสต์แบบวงกลมและลิสต์แบบเชื่อมโยงสองทาง

โครงสร้างข้อมูลแต่ละประเภทมีกรณีการใช้งานที่แตกต่างกันไป ขึ้นอยู่กับการเข้าถึงข้อมูลและความต้องการหน่วยความจำ ตัวอย่างเช่น โครงสร้างข้อมูลแบบลิสต์เชื่อมโยงสองทิศทางช่วยให้เข้าถึงข้อมูลย้อนกลับได้ง่าย แต่ต้องแลกมาด้วยการใช้พอยเตอร์เพิ่มเติม


3) จะกลับลำดับของลิสต์เชื่อมโยงเดี่ยวได้อย่างไร (วิธีการเขียนโค้ด)

Revการเรียงลำดับใหม่ของลิสต์แบบเชื่อมโยงเป็นคำถามสัมภาษณ์คลาสสิก เป้าหมายคือการเปลี่ยนทิศทางของตัวชี้เพื่อให้ลิสต์กลับด้านโดยไม่ต้องสร้างโหนดใหม่

แนวคิดหลัก:
ใช้ตัวชี้สามตัว — prev, currและ next — และวนซ้ำไปตามรายการ ในแต่ละขั้นตอน ให้เปลี่ยนเส้นทางใหม่ curr.next ไปยัง prevจากนั้นเลื่อนตัวชี้ทั้งหมดไปข้างหน้า

ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode next = curr.next;
        curr.next = prev;
        prev = curr;
        curr = next;
    }
    return prev; // New head
}

สิ่งนี้จะแปลงโครงสร้างที่เชื่อมโยงโดยไม่ต้องใช้พื้นที่เพิ่มเติมและทำงานได้ O (n) เวลา


4) อธิบายเทคนิคการใช้ตัวชี้สองตัวเพื่อหาจุดกึ่งกลางของรายการเชื่อมโยง (Linked List)

วิธีที่มีประสิทธิภาพที่สุดในการค้นหาโหนดตรงกลางของรายการเชื่อมโยงคือการใช้ตัวชี้สองตัว:

  • A ตัวชี้ช้า ย้ายทีละโหนด
  • A ตัวชี้เร็ว เคลื่อนย้ายโหนดสองโหนดในแต่ละครั้ง

เมื่อเข็มชี้เร็วไปถึงจุดสิ้นสุด เข็มชี้ช้าจะอยู่ที่จุดกึ่งกลาง เทคนิคนี้ทำงานในลักษณะ... O (n) เวลาโดยไม่ต้องใช้พื้นที่เพิ่มเติม


5) คุณจะตรวจจับวงจรใน Linked List ได้อย่างไร?

การตรวจจับวงจรเป็นปัญหาคลาสสิกอีกอย่างหนึ่ง วิธีแก้ปัญหามาตรฐานคือการใช้ อัลกอริทึมเต่าและกระต่ายของฟลอยด์:

  • ย้าย slow pointer หนึ่งขั้นในเวลา.
  • ย้าย fast pointer ทีละสองก้าว
  • ถ้าลิสต์มีวงจร ตัวชี้ทั้งสองจะมาบรรจบกัน

ถ้าตัวชี้เร็วไปถึง nullรายการดังกล่าวไม่มีวงจร วิธีนี้ทำงานใน O (n) เวลาและ O (1) ช่องว่าง


6) ข้อดีและข้อเสียของโครงสร้างข้อมูลแบบ Linked List มีอะไรบ้าง?

โครงสร้างข้อมูลแบบลิสต์เชื่อมโยงมีข้อดีและข้อเสียหลายประการ:

ข้อดี ข้อเสีย
ขนาดไดนามิก ไม่มีการเข้าถึงแบบสุ่ม
ใส่/ลบได้ง่าย หน่วยความจำเพิ่มเติมสำหรับตัวชี้
มีประสิทธิภาพสำหรับการเพิ่มปริมาณข้อมูล ประสิทธิภาพแคชต่ำ

โครงสร้างข้อมูลแบบลิสต์เชื่อมโยง (Linked List) ทำงานได้ดีกับข้อมูลแบบไดนามิก แต่การเข้าถึงองค์ประกอบอาจช้ากว่าแบบอาร์เรย์ เนื่องจากแต่ละการเข้าถึงต้องเริ่มจากส่วนหัวของลิสต์


7) คุณจะรวมลิสต์เชื่อมโยงที่เรียงลำดับแล้วสองลิสต์เข้าด้วยกันได้อย่างไร?

การรวมลิสต์ที่เรียงลำดับแล้วสองลิสต์เข้าด้วยกันเป็นอีกหนึ่งปัญหาที่พบบ่อยในการสัมภาษณ์งาน แนวคิดคือการวนลูปผ่านทั้งสองลิสต์พร้อมกันและสร้างลิสต์ที่เรียงลำดับใหม่โดยการเลือกโหนดที่เล็กที่สุดจากลิสต์ใดลิสต์หนึ่งในแต่ละขั้นตอน

ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(0);
    ListNode tail = dummy;
    while (l1 != null && l2 != null) {
        if (l1.val < l2.val) {
            tail.next = l1;
            l1 = l1.next;
        } else {
            tail.next = l2;
            l2 = l2.next;
        }
        tail = tail.next;
    }
    tail.next = (l1 != null) ? l1 : l2;
    return dummy.next;
}

วิธีการนี้จะรักษาลำดับที่เรียงไว้และทำงานได้ใน โอ(น + ม) ถึงเวลาสำหรับรายการที่มีความยาว n และ m แล้ว


8) อธิบายวิธีการลบโหนดที่ N จากส่วนท้ายของรายการเชื่อมโยง (Linked List)

เทคนิคที่มีประสิทธิภาพมากที่สุดคือการใช้ สองพอยเตอร์ แยกกันด้วยโหนด n โหนด เลื่อนตัวชี้ตัวแรกไปข้างหน้า n ขั้น จากนั้นเลื่อนตัวชี้ทั้งสองตัวจนกระทั่งตัวแรกไปถึงจุดสิ้นสุด ตัวชี้ตัวที่สองจะอยู่ก่อนโหนดเป้าหมายพอดี

วิธีนี้ช่วยหลีกเลี่ยงการคำนวณความยาวของรายการแยกต่างหากและเสร็จสมบูรณ์ในเวลาไม่นาน O (n) เวลา นอกจากนี้ยังจัดการกับกรณีพิเศษต่างๆ เช่น การลบโหนดแรกได้ด้วย


9) การเข้าถึงองค์ประกอบที่ k ในรายการเชื่อมโยงมีความซับซ้อนด้านเวลาเท่าใด?

การเข้าถึงไฟล์ kการเข้าถึงองค์ประกอบที่ th ในรายการเชื่อมโยงต้องใช้การวนซ้ำจากหัวรายการจนกว่าจะถึงองค์ประกอบที่ th kโหนดที่ th เนื่องจากรายการเชื่อมโยงไม่มีการจัดทำดัชนีโดยตรง จึงทำให้มีค่าใช้จ่าย O (n) ในกรณีที่เลวร้ายที่สุด อาจต้องใช้เวลาสักระยะ

ในทางตรงกันข้าม อาร์เรย์รองรับการจัดทำดัชนีโดยตรงใน O (1) เวลา


10) เหตุใดคุณจึงควรใช้ Linked List แทนที่จะใช้ Array?

โครงสร้างข้อมูลแบบลิสต์เชื่อมโยงมีประโยชน์อย่างยิ่งในกรณีต่อไปนี้:

  • คุณคาดหวังว่าจะมีการแทรกและลบข้อมูลบ่อยครั้งในตำแหน่งที่ไม่แน่นอน
  • คุณไม่ทราบขนาดของข้อมูลล่วงหน้า
  • การแบ่งส่วนหน่วยความจำทำให้การจัดสรรหน่วยความจำอย่างต่อเนื่องทำได้ยาก

โครงสร้างข้อมูลแบบนี้รองรับการจัดสรรหน่วยความจำแบบไดนามิกที่มีประสิทธิภาพ และการแทรก/ลบข้อมูลที่จุดสิ้นสุดของรายการหรือด้วยการอ้างอิงโหนดที่ทราบได้ในเวลาคงที่ ซึ่งเป็นข้อดีที่อาร์เรย์ไม่สามารถเทียบได้


11) การใช้งานจริงของ Linked List มีอะไรบ้าง?

โครงสร้างข้อมูลแบบลิสต์เชื่อมโยง (Linked List) ถูกนำมาใช้กันอย่างแพร่หลายในระบบต่างๆ ที่ การจัดสรรหน่วยความจำแบบไดนามิก, การสอดใส่บ่อยครั้งหรือ โครงสร้างข้อมูลที่มีขนาดแปรผันได้ เป็นสิ่งที่จำเป็น โดยจะถูกนำไปใช้ในแนวคิดและแอปพลิเคชันหลักๆ ของวิทยาการคอมพิวเตอร์หลายประการ เช่น:

  • การจัดการหน่วยความจำแบบไดนามิก (ใช้ในระบบปฏิบัติการ)
  • ฟังก์ชันยกเลิก/ทำซ้ำ ในโปรแกรมแก้ไขข้อความ
  • การเชื่อมโยงตารางแฮช เพื่อแก้ไขการชนกัน
  • การนำทางเพลย์ลิสต์เพลงหรือวิดีโอ
  • การแสดงความสัมพันธ์ของกราฟ
  • การดำเนินการทางเลขคณิตของพหุนาม

ตัวอย่างเหล่านี้แสดงให้เห็นว่าลิสต์แบบเชื่อมโยงให้ความยืดหยุ่นและประสิทธิภาพในการจัดการลำดับข้อมูล ซึ่งการปรับขนาดของอาร์เรย์จะมีค่าใช้จ่ายสูง


12) อธิบายความแตกต่างระหว่างลิสต์เชื่อมโยงเดี่ยวและลิสต์เชื่อมโยงคู่

ลักษณะ รายการที่เชื่อมโยงเพียงรายการเดียว รายการที่เชื่อมโยงเป็นสองเท่า
ชี้ 1 (เฉพาะโหนดถัดไป) 2 (ก่อนหน้าและถัดไป)
การข้ามผ่าน ทิศทางเดียวเท่านั้น ทั้งสองทิศทาง
ใช้หน่วยความจำ Less (มีตัวชี้เพียงตัวเดียว) เพิ่มเติม (ตัวชี้พิเศษ)
การลบ ยากขึ้น (ต้องผ่านโหนดก่อนหน้า) ง่ายดาย
ตัวอย่างการใช้งาน การใช้งาน Stack การนำทางประวัติการเข้าชมเว็บไซต์

A รายการที่เชื่อมโยงสองครั้ง ใช้งานได้หลากหลายกว่า แต่ใช้หน่วยความจำเพิ่มขึ้น ในทางตรงกันข้าม รายการที่เชื่อมโยงเดี่ยวๆ มีน้ำหนักเบาและมีประสิทธิภาพสำหรับการเคลื่อนที่แบบทิศทางเดียว


13) จะลบข้อมูลซ้ำออกจากรายการเชื่อมโยงที่เรียงลำดับแล้วได้อย่างไร?

เมื่อลิสต์แบบเชื่อมโยงได้รับการเรียงลำดับแล้ว ข้อมูลที่ซ้ำกันจะอยู่ติดกัน

วนลูปไปตามรายการและเปรียบเทียบข้อมูลของแต่ละโหนดกับโหนดถัดไป หากตรงกัน ให้ข้ามโหนดถัดไป

void removeDuplicates(ListNode head) {
    ListNode current = head;
    while (current != null && current.next != null) {
        if (current.val == current.next.val) {
            current.next = current.next.next;
        } else {
            current = current.next;
        }
    }
}

ซับซ้อน: เวลา O(n) และพื้นที่ O(1)

สำหรับลิสต์ที่ไม่ได้เรียงลำดับ สามารถใช้ HashSet เพื่อติดตามค่าที่ปรากฏได้


14) อะไรคือความแตกต่างระหว่างรายการเชื่อมโยงเชิงเส้นและรายการเชื่อมโยงแบบวงกลม?

ลักษณะ รายการเชื่อมโยงเชิงเส้น รายการที่เชื่อมโยงแบบวงกลม
โหนดสุดท้าย ชี้ไปยังค่าว่าง ชี้ไปยังโหนดหัว
การข้ามผ่าน สิ้นสุดเมื่อ next == NULL การสำรวจอย่างต่อเนื่อง
ใช้กรณี สแต็ก, คิว การจัดตารางแบบหมุนเวียน
ความซับซ้อน เรียบง่ายขึ้น การจัดการที่ซับซ้อนมากขึ้น

รายการแบบวงกลมมีประโยชน์อย่างยิ่งในแอปพลิเคชันต่างๆ เช่น การจัดตารางการทำงานของ CPU ซึ่งกระบวนการต่างๆ จะถูกดำเนินการเป็นรอบๆ


15) คุณจะหาจุดตัดของลิสต์เชื่อมโยงสองลิสต์ได้อย่างไร?

เพื่อตรวจสอบว่าลิสต์เชื่อมโยงเดี่ยวสองลิสต์มีส่วนที่ทับซ้อนกันหรือไม่:

  1. จงหาความยาวของทั้งสองรายการ
  2. เลื่อนตัวชี้ของรายการที่ยาวกว่าไปตามผลต่างของความยาว
  3. วนลูปผ่านทั้งสองรายการพร้อมกันจนกว่าโหนดจะเหมือนกัน

อีกทางเลือกหนึ่งคือ แฮชเซ็ต สามารถใช้เพื่อจัดเก็บโหนดที่เยี่ยมชมแล้วโดยใช้พื้นที่ O(n)

วิธีการนี้มีประสิทธิภาพและมักถูกถามในการสัมภาษณ์งานระดับสูง


16) คุณจะตรวจสอบได้อย่างไรว่าลิสต์เชื่อมโยงสองลิสต์นั้นเหมือนกันหรือไม่?

รายการเชื่อมโยงสองรายการจะเหมือนกันก็ต่อเมื่อ:

  • พวกมันมีจำนวนโหนดเท่ากัน
  • ค่าของโหนดที่สอดคล้องกันนั้นเรียงลำดับเหมือนกัน

ขั้นตอนวิธีการ:

  1. เรียกดูทั้งสองรายการพร้อมกัน
  2. เปรียบเทียบข้อมูลของแต่ละโหนด
  3. ถ้าคู่ทั้งหมดตรงกันและทั้งคู่ได้ค่าเป็น NULL แสดงว่าคู่เหล่านั้นเหมือนกัน

ความซับซ้อนเชิงเวลา: O (n)

ความซับซ้อนของพื้นที่: O (1)


17) ในบริบทของลิสต์แบบเชื่อมโยง การรั่วไหลของหน่วยความจำคืออะไร?

A หน่วยความจำรั่ว เกิดขึ้นเมื่อโหนดที่จัดสรรแบบไดนามิกไม่ได้รับการปล่อยคืนหลังจากใช้งานเสร็จ

ในลิสต์แบบเชื่อมโยง ถ้า delete or free() หากฟังก์ชันนี้ไม่ถูกเรียกใช้กับโหนดที่ถูกลบออกจากรายการ หน่วยความจำจะยังคงถูกใช้งานอยู่แม้ว่าจะไม่สามารถเข้าถึงได้อีกต่อไปแล้วก็ตาม

ตัวอย่างเช่น การไม่ปล่อยโหนดที่ถูกลบใน C/C++ ส่งผลให้หน่วยความจำหมดลงทีละน้อย ทำให้ระบบทำงานช้าลงหรือเกิดการขัดข้อง

การจัดการล้างข้อมูลอย่างถูกต้องโดยใช้ destructor หรือการปลดปล่อยหน่วยความจำอย่างชัดเจนจะช่วยหลีกเลี่ยงปัญหานี้ได้


18) อธิบายวิธีการสร้างโครงสร้างข้อมูลแบบ Stack โดยใช้ Linked List

ใน กองโดยองค์ประกอบต่างๆ จะถูกจัดเรียงตามลำดับ LIFO (Last In, First Out)

โครงสร้างข้อมูลแบบลิสต์เชื่อมโยง (Linked List) เหมาะอย่างยิ่ง เพราะการแทรกและการลบข้อมูลเกิดขึ้นที่ส่วนหัวของลิสต์อย่างมีประสิทธิภาพ

Operaชั่น:

  • ผลักดัน: แทรกโหนดใหม่ที่ส่วนหัว
  • โผล่: ลบโหนดออกจากส่วนหัว
  • แอบมอง: ส่งข้อมูลส่วนหัวกลับมา

ข้อดี:
ไม่จำเป็นต้องกำหนดขนาดของอาร์เรย์ตายตัว อาร์เรย์จะขยายขนาดได้เองเมื่อมีการเพิ่มองค์ประกอบเข้าไป


19) เราสามารถใช้ลิสต์เชื่อมโยงเพื่อสร้างคิวได้อย่างไร?

ใน คิวองค์ประกอบต่างๆ จะถูกจัดเรียงตามลำดับ FIFO (First In, First Out)

ใช้โครงสร้างข้อมูลแบบลิสต์เชื่อมโยงในกรณีที่:

  • เพิ่มลงในคิว (แทรก): เพิ่มโหนดที่ส่วนท้าย
  • ลบออกจากคิว (Dequeue): ลบโหนดออกจากส่วนหัว

ซึ่งช่วยให้สามารถดำเนินการทั้งสองอย่างได้ใน O (1) เวลาพร้อมตัวชี้สองตัว — front และ rear.

โดยทั่วไปจะใช้ในระบบการจัดตารางงานและระบบคิวเครื่องพิมพ์


20) ความแตกต่างระหว่างอาร์เรย์ลิสต์และลิงก์ลิสต์มีอะไรบ้าง Java?

แง่มุม รายการอาร์เรย์ รายการที่เชื่อมโยง
พื้นที่จัดเก็บ อาร์เรย์ไดนามิก รายการที่เชื่อมโยงแบบคู่
เวลาเข้าถึง O (1) O (n)
แทรก/ลบ ราคาแพงในระดับกลาง มีประสิทธิภาพที่ปลายสุด
โอเวอร์เฮดหน่วยความจำ Less เพิ่มเติม (คำแนะนำเพิ่มเติม)
ใช้กรณี การเข้าถึงบ่อยครั้ง การแทรก/ลบข้อมูลบ่อยครั้ง

ตัวอย่าง: ใช้ ArrayList สำหรับการดำเนินการที่ต้องค้นหาข้อมูลจำนวนมาก และ LinkedList เมื่อการดำเนินการแทรก/ลบข้อมูลมีบทบาทสำคัญ


21) จะแปลงโครงสร้างข้อมูลแบบลิสต์เชื่อมโยงหลายระดับให้แบนราบได้อย่างไร?

A รายการเชื่อมโยงหลายระดับ อาจมีโหนดที่มีทั้งสองอย่าง next และ child ตัวชี้ (แต่ละตัวชี้ไปยังรายการเชื่อมโยงอื่น) เป้าหมายคือการรวมโหนดทั้งหมดเข้าเป็นรายการเชื่อมโยงระดับเดียว

วิธีการ:

  1. ใช้ กอง or ฟังก์ชันเรียกซ้ำ.
  2. เริ่มจากโหนดหัว
  3. ถ้าโหนดมี childผลักมัน next เพิ่มโหนดลงในสแต็ก และสร้าง child as next.
  4. ทำเช่นนี้ต่อไปจนกว่ากองจะว่างเปล่า

ความซับซ้อนของเวลา: O (n)

ความซับซ้อนของอวกาศ: O(n) สำหรับการเรียกซ้ำ/สแต็ก

ตัวอย่าง (ในเชิงแนวคิด):

1 - 2 - 3
    |
    4 - 5
Flattened → 1 → 2 → 4 → 5 → 3

คำถามนี้ประเมินความเข้าใจของคุณเกี่ยวกับการเรียกซ้ำและการจัดการตัวชี้


22) จะทำการโคลนลิสต์แบบเชื่อมโยงที่มีตัวชี้แบบสุ่มได้อย่างไร?

แต่ละโหนดในรายการเชื่อมโยงแบบพิเศษนี้มีตัวชี้สองตัว:

  • next → ชี้ไปยังโหนดถัดไป
  • random → ชี้ไปยังโหนดใดๆ ก็ได้

อัลกอริทึม (3 ขั้นตอน):

  1. แทรกโหนดที่โคลนแล้วระหว่างโหนดเดิม
  2. กำหนดตัวชี้แบบสุ่มให้กับโคลน (clone.random = original.random.next).
  3. แยกรายการทั้งสองออกจากกัน

วิธีนี้ช่วยประหยัดพื้นที่สำหรับแผนที่แฮชและทำงานได้ในเวลาอันสั้น O (n) เวลาด้วย O (1) พื้นที่ว่างเพิ่มเติม

ใช้กรณี: การคัดลอกข้อมูลโครงสร้างที่ซับซ้อนแบบลึก (เช่น กราฟหรือการอ้างอิงวัตถุ)


23) สคิปลิสต์คืออะไร และมีความเกี่ยวข้องกับลิงค์ลิสต์อย่างไร?

A รายการข้าม เป็นโครงสร้างรายการเชื่อมโยงแบบหลายชั้นที่ช่วยให้ค้นหา แทรก และลบข้อมูลได้อย่างรวดเร็ว (คล้ายกับต้นไม้สมดุล)

Operaการ เวลาเฉลี่ย กรณีที่เลวร้ายที่สุด
ค้นหา O (บันทึก n) O (n)
แทรก/ลบ O (บันทึก n) O (n)

โครงสร้างนี้ประกอบด้วยหลายระดับ โดยระดับบนจะ "ข้าม" โหนดหลายโหนด ทำให้ประสิทธิภาพการค้นหาดีขึ้น

ตัวอย่าง: ใช้ในฐานข้อมูล เช่น Redis และการใช้งาน map แบบพร้อมกัน


24) คุณจะตรวจจับพาลินโดรมในรายการเชื่อมโยงได้อย่างไร?

โครงสร้างข้อมูลแบบลิสต์เชื่อมโยง (linked list) เรียกว่า พาลินโดรม (palindrome) ถ้าสามารถอ่านได้เหมือนกันทั้งจากหน้าไปหลังและจากหลังไปหน้า

ขั้นตอนวิธีการ:

  1. หาค่าตรงกลางของรายการ
  2. Revเอาชนะในครึ่งหลัง
  3. เปรียบเทียบทั้งสองส่วนทีละจุด

ถ้าโหนดที่ตรงกันทั้งหมดตรงกัน ก็จะเป็นคำพาลินโดรม

ตัวอย่าง:

1 → 2 → 3 → 2 → 1 → ✅ พาลินโดรม

1 → 2 → 3 → 4 → ❌ ไม่ใช่พาลินโดรม

ความซับซ้อนของเวลา: O (n)

ความซับซ้อนของอวกาศ: O (1)


25) จะลบวงวนในรายการเชื่อมโยงได้อย่างไร?

หากพบวงวน (โดยใช้การตรวจจับวงวนของ Floyd) ให้ลบออกโดยใช้ขั้นตอนต่อไปนี้:

  1. ตรวจจับจุดบรรจบกันของตัวชี้แบบช้าและแบบเร็ว
  2. เลื่อนตัวชี้เมาส์หนึ่งตัวไปที่ส่วนหัว
  3. เลื่อนตัวชี้ทั้งสองทีละขั้นจนกระทั่งมาบรรจบกันที่ โหนดเริ่มต้นลูป.
  4. ตั้งค่าโหนดก่อนหน้า next ไปยัง null.

วิธีการนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการใช้หน่วยความจำเพิ่มเติมในระหว่างการแก้ไขวงจร


26) มีวิธีใดบ้างในการแสดงโครงสร้างข้อมูลแบบลิสต์เชื่อมโยงในหน่วยความจำ?

รายการเชื่อมโยงสามารถแสดงได้ในรูปแบบ สามวิธีหลัก:

ประเภทการแสดงผล Descriptไอออน ตัวอย่างการใช้งาน
โหนดไดนามิก แต่ละโหนดได้รับการจัดสรรและเชื่อมโยงแบบไดนามิก C, C++
การแสดงอาร์เรย์แบบคงที่ ใช้ดัชนีของอาร์เรย์แทนตัวชี้ ระบบฝังตัว
วัตถุที่เชื่อมโยง การแสดงผลเชิงวัตถุด้วยคลาส Java, Python

แต่ละวิธีเหมาะสมกับสภาพแวดล้อมที่แตกต่างกัน ตัวอย่างเช่น รายการแบบอาร์เรย์จะใช้เมื่อการจัดการตัวชี้มีข้อจำกัด


27) คุณจะหาความยาวของรายการเชื่อมโยง (linked list) ได้อย่างไร (ทั้งแบบวนซ้ำและแบบเรียกซ้ำ)?

วิธีการทำซ้ำ:

int getLength(ListNode head) {
    int count = 0;
    while (head != null) {
        count++;
        head = head.next;
    }
    return count;
}

วิธีการแบบเรียกซ้ำ:

int getLength(ListNode head) {
    if (head == null) return 0;
    return 1 + getLength(head.next);
}

ทั้งสองแนวทางมี O (n) ความซับซ้อนของเวลา; การเรียกซ้ำเพิ่มความซับซ้อน O (n) ค่าใช้จ่ายด้านพื้นที่เนื่องจากลำดับการเรียก (call stack)


28) จงอธิบายแนวคิดของลิสต์เชื่อมโยงสองทางแบบวงกลม พร้อมยกตัวอย่างประกอบ

ใน รายการเชื่อมโยงสองทางแบบวงกลมแต่ละโหนดจะมีลิงก์สองลิงก์ — ลิงก์หนึ่งเชื่อมไปยังโหนดถัดไป และอีกลิงก์หนึ่งเชื่อมไปยังโหนดก่อนหน้า — และโหนดสุดท้าย next ชี้ไปที่หัว ในขณะที่หัว prev ชี้ไปยังโหนดสุดท้าย

ตัวอย่างการใช้งานกรณี:

  • ระบบปฏิบัติการแบบเรียลไทม์ (การจัดตารางงานแบบราวด์โรบิน)
  • การเล่นเพลย์ลิสต์เพลงวนซ้ำ
  • การนำทางระหว่างแท็บหรือสไลด์

ข้อดี:

  • การเดินทางแบบสองทิศทาง
  • ไม่มีการอ้างอิงที่เป็นค่าว่าง
  • การแทรกและการลบที่มีประสิทธิภาพ

29) จะลบโหนดสลับในรายการเชื่อมโยงได้อย่างไร?

ขั้นตอนวิธีการ:

  1. เริ่มจากศีรษะก่อน
  2. ลบโหนดที่สองทุกโหนดโดยการปรับตัวชี้
  3. ทำเช่นนี้ต่อไปจนกว่ารายการจะสิ้นสุด

ตัวอย่าง:

Input: 1 → 2 → 3 → 4 → 5  
Output: 1 → 3 → 5

ซับซ้อน:

  • เวลา: O(n)
  • พื้นที่: O(1)

แบบทดสอบนี้จะตรวจสอบความเข้าใจเกี่ยวกับการเข้าถึงข้อมูลผ่านตัวชี้และความปลอดภัยในการลบข้อมูล


30) คุณจะหาโหนดที่ n จากจุดเริ่มต้นและจากจุดสิ้นสุดของรายการเชื่อมโยงได้อย่างไร?

ตั้งแต่เริ่มต้น: วนลูปไปตามรายการจนกว่าจำนวนจะเท่ากับ n

จากตอนจบ: ใช้ตัวชี้สองตัว

  1. เลื่อนตัวชี้ตัวแรกไปข้างหน้า n ขั้น
  2. เลื่อนทั้งสองอย่างพร้อมกันจนกว่าตัวแรกจะถึงค่าว่าง
  3. ตอนนี้ตัวชี้ตัวที่สองชี้ไปยังโหนดที่ n จากท้ายสุดแล้ว

ความซับซ้อนของเวลา: O (n)

ความซับซ้อนของอวกาศ: O (1)

วิธีนี้ช่วยหลีกเลี่ยงการคำนวณความยาวแยกต่างหาก ซึ่งช่วยเพิ่มประสิทธิภาพ


31) คุณจะจัดเรียงลำดับใหม่ของลิสต์แบบเชื่อมโยงได้อย่างไร?

ปัญหา: กำหนดให้ลิสต์หนึ่งรายการ L0 → L1 → … → Ln-1 → Lnเรียงลำดับใหม่ดังนี้ L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

ขั้นตอน:

  1. หาค่าตรงกลางของรายการ
  2. Revเอาชนะในครึ่งหลัง
  3. นำทั้งสองส่วนมาผสานเข้าด้วยกันสลับกันไป

ตัวอย่าง:

Input: 1 → 2 → 3 → 4 → 5  
Output: 1 → 5 → 2 → 4 → 3

ซับซ้อน: เวลา O(n) พื้นที่ O(1)

นี่เป็นการทดสอบการดำเนินการกับโครงสร้างข้อมูลแบบเชื่อมโยงหลายอย่างในคำถามเดียว


32) คุณจะแบ่งรายการเชื่อมโยงตามค่า x ที่กำหนดให้ได้อย่างไร?

วัตถุประสงค์:
จัดเรียงโหนดใหม่เพื่อให้โหนดทั้งหมดที่มีค่าน้อยกว่า x อยู่ก่อนโหนดที่มีค่ามากกว่าหรือเท่ากับ x

วิธีการ:

  • สร้างรายการจำลองสองรายการ: before และ after.
  • วนลูปผ่านรายการต้นฉบับและเพิ่มโหนดลงในรายการที่เกี่ยวข้อง
  • นำมารวมกันในตอนท้าย

ตัวอย่าง:

Input: 3 → 5 → 8 → 5 → 10 → 2 → 1, x = 5  
Output: 3 → 2 → 1 → 5 → 8 → 5 → 10

คำถามนี้มักถูกถามเพื่อประเมินความสามารถในการจัดเรียงข้อมูลใหม่


33) คุณจะเรียงลำดับลิสต์แบบเชื่อมโยงได้อย่างไร?

เนื่องจากโครงสร้างข้อมูลแบบลิงก์ลิสต์ไม่รองรับการเข้าถึงแบบสุ่ม ผสานการเรียง เป็นตัวเลือกที่ดีที่สุด

ขั้นตอน:

  1. แบ่งรายการออกเป็นสองส่วนโดยใช้ตัวชี้แบบช้า/เร็ว
  2. เรียงลำดับแต่ละครึ่งโดยใช้การเรียกซ้ำ
  3. รวมครึ่งที่เรียงลำดับแล้วเข้าด้วยกัน

ข้อดี:

  • เวลา O(n log n)
  • พื้นที่เพิ่มเติม O(1) (สำหรับเวอร์ชันแบบวนซ้ำ)

ต่างจากอาร์เรย์ QuickSort ไม่มีประสิทธิภาพสำหรับลิสต์แบบเชื่อมโยงเนื่องจากความซับซ้อนในการจัดเรียงตัวชี้ใหม่


34) ความแตกต่างระหว่างลิสต์เชื่อมโยงแบบเดี่ยว แบบคู่ และแบบวงกลมคืออะไร?

ลักษณะ เดี่ยวๆ สองเท่า กลม
การเชื่อมโยง หนึ่ง (ถัดไป) สอง (ก่อนหน้า & ถัดไป) โหนดสุดท้ายเชื่อมต่อกับส่วนหัว
การข้ามผ่าน ส่งต่อเท่านั้น ไปข้างหน้าและถอยหลัง สามารถท่องไปได้ไม่จำกัด
การแทรก/การลบ ปานกลาง ง่ายขึ้นทั้งสองด้าน การจัดการกรณีพิเศษ
ใช้กรณี สแต็ก, คิว ยกเลิกการดำเนินการ การจัดตารางแบบหมุนเวียน

คำถามเปรียบเทียบนี้มักปรากฏขึ้นเพื่อตรวจสอบความเข้าใจในแนวคิด


35) จะหาจุดตัดของรายการเชื่อมโยงแบบวงกลมสองรายการได้อย่างไร?

นี่เป็นการต่อยอดจากปัญหาทางแยก

ขั้นตอนวิธีการ:

  1. ตรวจสอบว่าแต่ละรายการมีลูปหรือไม่
  2. ถ้าทั้งสองไม่มีวงจร → ให้ใช้อัลกอริทึมการหาจุดตัดมาตรฐาน
  3. ถ้าทั้งสองเป็นวัฏจักร → ให้หาจุดเริ่มต้นของวัฏจักรสำหรับแต่ละอัน แล้วตรวจสอบว่าจุดทั้งสองเหมือนกันหรือเชื่อมต่อกันหรือไม่

ปัญหานี้เป็นการรวมกันของ... การตรวจจับวงจร และ ตรรกะจุดตัดการทดสอบความสามารถในการให้เหตุผลแบบหลายแนวคิด


36) อธิบายวิธีการแทรกโหนดลงในรายการเชื่อมโยงที่เรียงลำดับแล้ว

ขั้นตอน:

  1. สร้างโหนดใหม่โดยใช้ค่าที่กำหนดให้
  2. เดินไปเรื่อยๆ จนกว่าจะพบตำแหน่งที่ถูกต้อง
  3. ปรับ next ชี้ไปยังตัวชี้วัดตามนั้น

ตัวอย่าง:

Input: 1 → 3 → 5 → 7, Insert 4  
Output: 1 → 3 → 4 → 5 → 7

นี่เป็นโจทย์ปัญหาพื้นฐานเกี่ยวกับการปรับตำแหน่งตัวชี้เมาส์


37) คุณจะแบ่งรายการเชื่อมโยงออกเป็นสองส่วนได้อย่างไร?

ขั้นตอนวิธีการ:

  • ใช้ทั้งวิธีการชี้เมาส์แบบช้าและแบบเร็ว
  • เมื่อ fast ถึงจุดสิ้นสุดแล้ว slow จะอยู่ตรงจุดกึ่งกลาง
  • แยกที่จุดนั้น

ตัวอย่าง:

Input: 1 → 2 → 3 → 4 → 5  
Output: 1 → 2 → 3  and  4 → 5

การดำเนินการนี้มักเป็นขั้นตอนแรกของการเรียงลำดับแบบผสานรายการเชื่อมโยง (linked list merge sort)


38) จะหาค่าที่ปรากฏครั้งสุดท้ายในรายการแบบลิงก์ได้อย่างไร?

ไล่ดูรายการไปเรื่อยๆ โดยติดตามโหนดสุดท้ายที่พบค่าเป้าหมายอยู่เสมอ

รหัสเทียม:

ListNode findLastOccurrence(ListNode head, int val) {
    ListNode result = null;
    while (head != null) {
        if (head.val == val) result = head;
        head = head.next;
    }
    return result;
}

ซับซ้อน: O (n)

แบบทดสอบนี้จะตรวจสอบความเข้าใจเกี่ยวกับการสำรวจเชิงเส้นและการตรวจสอบเงื่อนไข


39) คุณจะลบข้อมูลทั้งหมดที่ตรงกับคีย์ที่กำหนดออกจากรายการแบบเชื่อมโยงได้อย่างไร?

ขั้นตอนวิธีการ:

  1. หากโหนดหัวมีคีย์เป้าหมาย ให้ดำเนินการกับโหนดหัวก่อน
  2. จากนั้นให้วนลูปและลบโหนดถัดไปที่มีคีย์นั้นอยู่

ตัวอย่าง:

Input: 1 → 2 → 6 → 3 → 4 → 5 → 6, Key = 6  
Output: 1 → 2 → 3 → 4 → 5

ซับซ้อน: O (n)

สิ่งนี้แสดงให้เห็นถึงความรู้เกี่ยวกับกรณีพิเศษ (โดยเฉพาะการลบส่วนหัว)


40) ความแตกต่างที่สำคัญระหว่างโครงสร้างข้อมูลแบบ Stack และ Linked List คืออะไร?

ลักษณะ กอง รายการที่เชื่อมโยง
ประเภทการเข้าถึง LIFO (เข้าก่อนออกก่อน) เนื่อง
การดำเนินงาน อาร์เรย์หรือรายการเชื่อมโยง แบบอิงตามโหนด
Operations ดัน/ป๊อป แทรก/ลบ/สำรวจ
ความยืดหยุ่น จำกัด การเข้าถึง การเข้าถึงที่ยืดหยุ่น
ใช้กรณี การจัดการการเรียกใช้ฟังก์ชัน การจัดการข้อมูลแบบไดนามิก

สามารถนำโครงสร้างแบบเรียงซ้อนมาใช้งานได้ โดยใช้รายการเชื่อมโยงแต่ทั้งสองแตกต่างกันในด้านแนวคิด — สแต็กมีการจำกัดการเข้าถึง ในขณะที่รายการเชื่อมโยงเป็นโครงสร้างอเนกประสงค์


🔍 รวมคำถามสัมภาษณ์ยอดนิยมพร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) ลิงค์ลิสต์คืออะไร และแตกต่างจากอาร์เรย์อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจของคุณเกี่ยวกับโครงสร้างข้อมูลพื้นฐานและความสามารถในการเปรียบเทียบข้อดีข้อเสีย

ตัวอย่างคำตอบ: รายการเชื่อมโยง (Linked List) เป็นโครงสร้างข้อมูลเชิงเส้นที่องค์ประกอบซึ่งเรียกว่าโหนดเชื่อมต่อกันโดยใช้ตัวชี้ แต่ละโหนดประกอบด้วยข้อมูลและการอ้างอิงไปยังโหนดถัดไป แตกต่างจากอาร์เรย์ รายการเชื่อมโยงไม่จำเป็นต้องใช้หน่วยความจำที่ต่อเนื่องกันและอนุญาตให้ปรับขนาดได้แบบไดนามิก แต่มีเวลาในการเข้าถึงที่ช้ากว่าเนื่องจากองค์ประกอบไม่ได้ถูกกำหนดดัชนี


2) ในการใช้งานจริง คุณจะเลือกใช้ลิสต์เชื่อมโยง (linked list) แทนอาร์เรย์ (array) เมื่อใด?

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขากำลังประเมินวิจารณญาณเชิงปฏิบัติของคุณในการเลือกโครงสร้างข้อมูลที่เหมาะสม

ตัวอย่างคำตอบ: ฉันจะเลือกใช้ลิสต์เชื่อมโยงเมื่อจำเป็นต้องเพิ่มและลบข้อมูลบ่อยๆ โดยเฉพาะอย่างยิ่งในส่วนกลางของชุดข้อมูล ในงานก่อนหน้านี้ ฉันทำงานเกี่ยวกับฟีเจอร์การจัดตารางงาน ซึ่งมีการเพิ่มและลบงานบ่อยครั้ง และลิสต์เชื่อมโยงให้ประสิทธิภาพที่ดีกว่าอาร์เรย์


3) คุณช่วยอธิบายความแตกต่างระหว่างลิสต์แบบลิงก์เดี่ยวและลิสต์แบบลิงก์คู่ได้ไหม?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการตรวจสอบความเข้าใจในแนวคิดของคุณและความสามารถในการอธิบายความแตกต่างทางเทคนิคได้อย่างชัดเจน

ตัวอย่างคำตอบ: รายการเชื่อมโยงแบบเดี่ยว (Singly Linked List) มีโหนดที่ชี้ไปยังโหนดถัดไปเท่านั้น ในขณะที่รายการเชื่อมโยงแบบคู่ (Doubly Linked List) มีโหนดที่ชี้ไปยังทั้งโหนดถัดไปและโหนดก่อนหน้า รายการเชื่อมโยงแบบคู่ช่วยให้การท่องไปในทิศทางย้อนกลับทำได้ง่ายกว่า แต่ต้องการหน่วยความจำมากกว่าเนื่องจากมีตัวชี้เพิ่มเติม


4) คุณจะตรวจจับรอบในรายการที่เชื่อมโยงได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: แบบทดสอบนี้จะวัดทักษะการแก้ปัญหาและความคุ้นเคยกับรูปแบบอัลกอริทึมทั่วไปของคุณ

ตัวอย่างคำตอบ: วิธีการทั่วไปคือการใช้ตัวชี้สองตัวที่เคลื่อนที่ด้วยความเร็วต่างกัน ซึ่งมักเรียกว่าเทคนิคตัวชี้ช้าและตัวชี้เร็ว หากเกิดวงวน ตัวชี้ทั้งสองจะมาบรรจบกันในที่สุด ในตำแหน่งงานก่อนหน้านี้ ผมใช้วิธีนี้เพื่อป้องกันวงวนไม่สิ้นสุดในไปป์ไลน์การประมวลผลข้อมูล


5) การดำเนินการทั่วไปที่ใช้กับลิสต์แบบเชื่อมโยงมีอะไรบ้าง?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการดูว่าคุณเข้าใจขั้นตอนการปฏิบัติงานมาตรฐานและผลกระทบที่ตามมาหรือไม่

ตัวอย่างคำตอบ: การดำเนินการทั่วไป ได้แก่ การแทรก การลบ การวนซ้ำ การค้นหา และการกลับลำดับรายการ การดำเนินการแต่ละอย่างมีความซับซ้อนของเวลาที่แตกต่างกัน ขึ้นอยู่กับตำแหน่งที่ดำเนินการ ซึ่งเป็นสิ่งสำคัญในการออกแบบระบบที่มีประสิทธิภาพ


6) คุณจัดการกับการแทรกโหนดตรงกลางของรายการเชื่อมโยงอย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขากำลังตรวจสอบความเข้าใจของคุณเกี่ยวกับการควบคุมตัวชี้เมาส์และความใส่ใจในรายละเอียด

ตัวอย่างคำตอบ: ในการแทรกโหนดตรงกลาง ขั้นแรกฉันจะวนไปตามรายการเพื่อหาตำแหน่งเป้าหมาย จากนั้นปรับตัวชี้เพื่อให้โหนดใหม่ชี้ไปยังโหนดถัดไป และโหนดก่อนหน้าชี้ไปยังโหนดใหม่ การอัปเดตตัวชี้อย่างระมัดระวังเป็นสิ่งสำคัญเพื่อหลีกเลี่ยงการทำให้รายการเสียหาย


7) อธิบายสถานการณ์ที่โครงสร้างข้อมูลแบบลิสต์เชื่อมโยงทำให้เกิดปัญหาด้านประสิทธิภาพ และคุณแก้ไขปัญหานั้นอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: คำถามเชิงพฤติกรรมนี้ประเมินความสามารถของคุณในการไตร่ตรองและปรับปรุงให้เหมาะสมที่สุด

ตัวอย่างคำตอบ: ในงานก่อนหน้านี้ ผมใช้โครงสร้างข้อมูลแบบลิสต์เชื่อมโยง (linked list) สำหรับการค้นหาข้อมูลบ่อยครั้ง ซึ่งส่งผลให้ประสิทธิภาพการทำงานช้าลง ผมจึงระบุปัญหาและแนะนำให้เปลี่ยนไปใช้โครงสร้างข้อมูลแบบแฮช (hash-based structure) ซึ่งช่วยปรับปรุงเวลาในการค้นหาได้อย่างมาก


8) คุณจะกลับลำดับของรายการเชื่อมโยงได้อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความคิดเชิงตรรกะและความเข้าใจของคุณเกี่ยวกับวิธีการแบบวนซ้ำหรือแบบเรียกซ้ำ

ตัวอย่างคำตอบ: ฉันจะกลับลำดับของรายการเชื่อมโยงโดยการวนซ้ำผ่านรายการนั้นและเปลี่ยนตัวชี้ next ของแต่ละโหนดให้ชี้ไปยังโหนดก่อนหน้า กระบวนการนี้จะดำเนินต่อไปจนกว่าตัวชี้ทั้งหมดจะถูกกลับลำดับและส่วนหัวของรายการได้รับการอัปเดต


9) การใช้ลิสต์เชื่อมโยงมีข้อดีและข้อเสียอย่างไรบ้าง?

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขาต้องการมุมมองที่สมดุลและตระหนักถึงข้อแลกเปลี่ยนต่างๆ

ตัวอย่างคำตอบ: ข้อดีได้แก่ ขนาดที่ปรับเปลี่ยนได้ และการแทรกและลบข้อมูลที่มีประสิทธิภาพ ส่วนข้อเสียได้แก่ การใช้หน่วยความจำที่สูงกว่า และเวลาในการเข้าถึงที่ช้ากว่าเมื่อเทียบกับอาร์เรย์ ในบทบาทงานก่อนหน้านี้ของผม การเข้าใจข้อดีข้อเสียเหล่านี้ช่วยในการเลือกโครงสร้างที่เหมาะสมสำหรับส่วนประกอบต่างๆ


10) คุณตัดสินใจเลือกใช้โครงสร้างข้อมูลแบบ Linked List ประเภทใดในการออกแบบระบบได้อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: คำถามเชิงสถานการณ์นี้ประเมินการตัดสินใจในบริบททางสถาปัตยกรรม

ตัวอย่างคำตอบ: ฉันพิจารณาปัจจัยต่างๆ เช่น ความต้องการในการท่องไปในโครงสร้างข้อมูล ข้อจำกัดด้านหน่วยความจำ และความถี่ในการดำเนินการ ตัวอย่างเช่น หากจำเป็นต้องท่องไปในโครงสร้างข้อมูลแบบย้อนกลับ โครงสร้างข้อมูลแบบรายการเชื่อมโยงสองทางจะเหมาะสมกว่า ในขณะที่โครงสร้างข้อมูลแบบรายการเชื่อมโยงทางเดียวก็เพียงพอสำหรับการใช้งานที่เรียบง่ายและประหยัดหน่วยความจำ

สรุปโพสต์นี้ด้วย: