(อาจารย์สุธาสินี) นะคะ โอเคเดี๋ยววันนี้ นะคะ เดี๋ยวเราจะมาขึ้นรูปแบบของโครงสร้างข้อมูล อีกหนึ่งรูปแบบก็คือ Link List นะคะ ก็คือ Link List จากเดิมที่เราเรียนไปเมื่อคราวก่อน เราเรียนลิสต์ใช่ไหมคะ ตัวแรก ก็คือ List นะคะ ตัวที่ 2 ก้คือ Dicคราวนี้ยังจำได้ไหมว่ารูปแบบของการเขียนตัวแรกน่ะคะ อะไรเอ่ย อันนี้จะเป็นเบอร์ 1 นะ เดี๋ยวครูจะให้ตอบ 1 คือ Lisรูปแบบการเขียนแบบนี้เราเรียกว่าอะไรคะ 1 หรือ 2 รูปแบบแบบนี้ เราเรียกว่าเป็น... ใช่ คนอื่นเป็นแบบไหนคะ มีก้ามปูเปิด มี 1, 2, 3 เป็นลักษณะของการจัดเก็บแบบไหนคะหรือ Dictionary แบบไหนดี ไหนยกมือให้ครูดุหน่อย ถ้าเป็น Listคือ 1 ใช่ไหมคะ ถ้าเป็น Dictionary ก็คือ 2 ตัววนี้เป็นรูปแบบของการจัด เก็บข้อมูลแบบไหนคะ จำได้ไหม ถ้าแบบนี้นะ มี 1, 3,10 อย่างนี้ คืออะไร หรือรายการของผลไม้ ส้ม,องุ่น อย่างนี้น่ะค่ะ เราเรียกลักษณะการจัดเก็บข้อมูลแบบลองนึกสิคะ เป็น Listเป็นแบบไหนดี ตอบได้ไหมคะลืมหรือยัง มันจะมีรูปแบบใช่ไหมคะเมื่อคราวที่แล้วถ้าเป็นแบบก้ามปู เปิดแล้วใส่ข้อมูลตัวที่ 1 คอมมาตัวที่ 1 คอมมาตัวที่ 2 ตัวที่ 3 ไล่ไปเรื่อย ๆ อันนี้จะเรียกว่า"List" ก็คือลิสต์ถูกไหมคะ โอเค สิ่งเหล่านี้เรียกว่าเป็นการจัดเก็บข้อมูลในรูปแบบของ List รายการถูกไหมคะ คือลิสต์รายการน่ะ เหมือนแม่ให้เราไปซื้อของที่ตลาดก็จะบอกว่าซื้ออะไรบ้างถูกไหมคะ หอม, ผักชี, ไข่, หมู เห็นไหมคะ อันนี้เรามั่นใจว่ามันคือลิสต์นะ ถัดมา DicDictionary ถูกไหมคะ ถ้าเราพูดถึงตัว Dictionary จะเก็บแบบไหน นี้ถูกไหมคะ รูปแบบที่ 2 จะเป็นปีกกาเปิดแล้วก็ปีกกาปิด ถ้าเป็น Dictionary เราจะเห็นความต่างของรูปแบบของการเขียน ลิสต์จะใช้ปีกกาเปิด ไม่ใช่ ก้ามปูเปิด ถูกไมคะ แต่ถ้าเป็น Dictionary นะคะ ปีกกาเปิดถูกไหม แล้วค่าที่อยู่ในคอมม่านี่จะมีอยู่ 2 ตัวที่เรียกว่า "Key" กับ Value ถูกไหมคะ จะมีสัญลักษณสัญลักษณ์ ; เกิดขึ้นระหว่างค่าอย่างนี้นะคะ 1 ตัวแรกคือ Key แล้วก็มี : คือจุด 2 จุดตรงนี้ เสร็จแล้วก็ใส่ค่20 ก็คือ Value นะคะ เพราะฉะนั้น จะเห็นรูปแบบของการเขียนของ Dictiมันต่างกันเห็นหรือเปล่า ถ้าเราเห็นเราก็ตอบได้เลย ถ้าเป็นสัญลักษณ์แบบนี้ ก็คือ Listถ้าเป็นสัญลักษณ์แบบนี้ ก็คือ Dictionary นะคะแล้วเก็บ มีรูปแบบการเก็บ 2 แบบแล้ว ที่เก็บ 1 ตัวแปร เราเก็บค่าได้มากกว่า 1 ค่า ใช่ไหมคะ 1 ตัวแปรเก็บได้มากกว่า 1 ค่า เช่น เห็นไหมคะ มันเก็บได้หลายตัว ทีนี้ มันมีรูปแบบของการจัดเก็บอีกแบบหนึ่งนะคะ นะคะ ที่เรียกว่า "ลิงค์ลิสต์"เราจะพูดถึงลิงก์ลิสต์นะคะทิศทางเดียวก็คือทางเดี่ยวเหมือนเราเห็นนะคะ รถที่เป็น One way น่ะ เห็นรถเดินทางเดียว ถูกไหมคะไม่ให้รถสวน มันก็เป็นทิศทางเดียว แล้วลิงก์ลิสต์ลิงค์ลิสต์มันเก็บแบบไหนลิงก์ลิสต์มันเก็บแบบไหน ครุูให้ดูรูปนี้ก่อน มันคืออะไรคะ มันคือรถไฟใช่หรือเปล่า มันคือรถไฟ เรารู้ไหมว่าอันไหนคือด้านหน้าขของรถไฟรู้ไหมคะ อันไหนคือด้านข้างขวาอันไหนคือด้านหน้าของรถไฟ คือตรงนี้ถูกไหม เพราะอะไร เพราะเราเห็นหัวรถจักร แต่ละขบวนเห็นไหม แต่ละขบวนมันก็จะมีตัวเชื่อมกันถูกไหมคะ ขบวนที่ 1 ก็จะบรรทุกคน ก็จะมีคนอยู่ข้างใน ขบวนที่ 3 ก็จะมีคนอยู่ข้างใน ใช่ไหมคะ คราวนี้ถ้าคนนี่มันเยอะขึ้น เห็นไหม อย่างเช่นช่สงเทศกาลแบบนี้ 3 Bogy เขาต้องเอาโบกี้รถไฟมาต่อเพิ่มใช่ไหมคะ ขยายต่อเป็นโบกี้ที่ 4 โบกี้ที่ 5 เพื่อให้เราเดินทางนี่ เราสามารถบรรทุกคนนี่ได้เยอะขึ้นเราก็สามารถเพิ่ม Bowgแต่พอหมดช่วงเทศกาลทำไมคะ ก็ดึึงเอาโบกี้ออกมา ใช่ไหม ถอดดบกี้ออกเพราะว่ามันไม่มีคนน่ะ คนขึ้นไม่มีแล้ว เราก็ถอด Bowgie นั้นออกไปเราค่อยใส่เพิ่มเข้าไป จะเห็นว่าอันนี้คือ การจัดเก็บแบบลิงก์ลิสต์นะคะ Link เห็นไหมแต่ละตัลิงก์เชื่อม อันนี้คือลิงก์ ลิสต์ตัวนี้มันมีข้อมูลเก็บอยู่หลายตัวได้ คราวนี้มาดูว่าแล้วในลิงค์ลิสต์นี่ แต่ละโบกี้ ถ้าเราเทียบกับรถไฟ เราจะเทียบแต่ละโบกี้แต่ละลิงก์ลิสต์คือเป็นอะไร เราบอกว่า โบกี้นี่ เราจะแทนด้วย node นะคะ เราจะแทนด้วย Node1 Node นี่ ก็คือเอาไว้ใส่ข้อมูล เอาข้อมูลมาใส่ใน Node นี้ ถ้าเราจะมีข้อมูลหลายตัวเราก็เอา Node มาเชื่อมต่อกันนะคะ แล้วก็เอา Node นี่มาเชื่อมต่อกัน ทีนี้ใน 1 Node นี่คือแบ่งออกเป็น 2 ช1 node นี่แบ่งออกเป็น 2 ช่องนะคะ เอาไว้ใช้เก็บข้อมูล ช่องแรกนี่ ช่องนี้ เอาไว้เก็บข้อมูล ส่วนช่องที่ 2 เอาไว้ทำอะไร เอาไว้ใช้เชื่อมโหนดถัดไปถูกไหมคะ มันมีการเชื่อมไปยังโหนดถัดไป เช่น Node อารีนี่ Node ข้อมูลถัดไปคืออะไร ก็ดูเส้นเชื่อมมันเชื่อมาที่ไหน มาที่ Node ของ Suda อ๋อ เราก็ดูเส้นนี้ มันเชื่อมมาที่ยุพิน Node แบบนี้คือมันสุดแล้ว มันสุดคือมันไม่ได้ไปต่อที่ไหนแล้ว สสิ่งที่เราเห็นถูกไหมคะ โหนดมี 2 ช่อง ช่องแรกเอาไว้เก็บข้อมูล Node แรกคือเอาไว่ ช่องที่ 2 นี่ คือส่วนที่เรียกว่า "next" next คือถัดไป ถัดไป คือ ไปที่ไหน เพราะฉะนั้นนี่ หัวลูกศรนี่ จุดเริ่มต้นจะไปโผล่ตรงชข่อง Nextนะคะ node ที่ 2 เก็บข้อมูล Suda ถูกไหม ก็คือ ็ก็คือช่องที่ 2 ชื่อ Next Next ก็จะชี้มาที่ช่องของยุพินNode นี้ข้อมูลใส่อะไๆร ใส่ Yupin เห็นไหมคะ ส่วน next ไปไหนไหม ไม่ไป มันก็เลยมีค่าเป็น null มันก็จะมีค่าเป็น Null ตัวนี้ N-u-l-l ก็คือ ตัวปิดท้ายนะคะ ตัวปิดท้าย ในหัวรถในรถไฟ เราจะรู้ว่าโหนดแรก คือ มีหัวรถจักรอยู่ใช่ไหมคะ ในลิงค์ลิสต์ว่าหัวของลิงค์ลิสต์อยู่ที่ไหน รู้ได้อย่างไร จะมีตัวชี้นะคะ เส้นนี่เรียกว่า "ตัวชี้" ที่ชื่อว่า head head ก็คือหัว จะมีตัวชี้ที่ชื่อว่า "head" นี่ชี้อยู่ รู้ว่า Node คือ Node ที่ 1 โหนดนี้ คือ โหนดถัดไป คือ โหนดที่ 2, โหนดที่ 3 นะคะ คราวนี้อย่างที่ครูพูดไปแล้ว ว่า โหนดนี่ เราเทียบได้กับโบกี้ใช่ไหม ก็คือโบกี้รถไฟแต่ละโหนด แต่ละโหนด บรรทุกคน กันอย่างนี้ เราก็บันทึกข้อมูล มีหัวรถจักร โอเค แล้วก็มี head คือ โหนดแรก ข้อมูลในลิงก์ลิสต์ก็เทียบได้กับคนที่อยู่ในโบกี้ มี 10 คน นะคะ ตัวเชื่อมของโหนดที่บอกเชื่อมข้อต่อแคต่ก็คือตัว Next นะคะ ตัว Next ก็จะเชื่อมข้อต่อของแต่ละโบกี้ทีนี้ เวลาเราจะสร้าง node เวลาเราจะสร้าง node นะคะ เวลาเราจะสร้างโหนดนี่ เพื่อเชื่อมต่อเป็นลิงก์ลิสต์ เราวาดสี่เหลี่ยมแล้วแบ่งเป็น 2 ช่อง เห็นไหม เราวาดสี่เหลี่ยมแล้ววาดเป็น 2 ช่อง เราวาดสี่เหลี่ยมแล้ววาดวเป็น 2 ช่อช่องแรกก็คือ data ส่วน next นะคะ เอาไว้เชื่อมไปยังโหนดถัดไปแต่ตัวแรกที่เราสร้างนี่มันยังไม่ได้ เชื่อมไปที่ไหน เราก็เลยกำหนดให้มันมีค่าเป็น none ก็เขียนเส้นทับไว้ ก็คือมันยังไม่ไดไปที่ไหน เราก็ขีดทับไว้นะคะ เวลาเราจะเพิ่ม node เราจะเอามาต่อถูกไหมคะ ต่อตรง next แล้วก็เชื่อไปที่ไหน เราจะเชื่อมตรงส่วนของที่เรียกว่า "next" นะคะ ให้มันเชื่อมไปที่ไหน คราวนี้ เวลาเราจะ สร้าง node ใหม่ขึ้นมานะคะ วิธีการสร้าง โหนดใหม่ของเรา ต้องมีตัวชี้นะคะ โหนดใหม่ที่เราสร้างขึ้นมานี่ ก็คือสี่เหลี่ยมถูกไหมคะเป็นสี่เหลี่ยมแล้วก็แบ่งเป็น 2ชเมื่อเราสร้างสี่เหลี่ยมถูกไหมคะ แบ่งเป็น 2 ช่อง ช่องแรกนี่ แบ่งเป็นข้อมูลช่องที่ 2 เอาไว้เชื่อมไปยังโหนดถัดไป สมมติครูใส่ข้อมูลเป็นเลข 10 ครูก็ต้องใส่ในช่องแรก นะ เสร็จแล้วนี่เวลาเราสร้าง node เราต้องมีตัวชี้ ก็วาดลูกศรชี้นะคะ ชี้เข้าหาโหนดที่เราสร้างขึ้น แล้วใช้ตัวแปรอะไรก็ได้ นะคะ เวลาเราเขียนคำสั่งเราสร้างด้วยมือ วาดถูกไหมคะ แล้วเราจะสั่งให้คอมพิวเตอร์มันทำงานอย่างไร X ตัวแรก ก็คือตัวชี้ของ node ใหม่ เห็นไหมคะ ก็คือ x ตัวนี้นะx. ด้วย x. .x แล้วตามด้วย data คือส่วนไหน คือ ส่วนของข้อมูล เราต้องเขียนแบบนี้เสมอว่า .datax คือ ชื่อตัวชี้ .data = 3 หมายความว่าเอา 3ไปหย่อนลง ช่องที่ชื่อว่า "data" ที่ x ชี้อยู่นะคะ ถัดมาส่วน next ล่ะ นะคะ ถ้าเราไม่ได้เชื่อมไปกับตัวไหนเลย ถ้า node แรกที่เราสร้างขึ้น มันไม่ได้เชื่อมกับที่ไหนเราก็กำหนดให้ x.next = none ก็คือตัวนี้ เท่ากับ noneเท่ากับ none คราวนี้ ถ้าครูจะสร้างโหนดใหม่ขึ้นมาอีกนะคะ ตัวชี้คือ node 2 แล้วเอาหน่อย ช่อง data ครูก็จะเขียนได้เป็น node2.data = 7นะคะ node2.next = none ก็คือปิดตัวนี้ไว้ นะคะ เดี๋ยวเราดูไปด้วยกันก่อนนะ ลองทำแบบฝึกหัด ถ้าเราต้องการจะเชื่อมโหนดบ้าง เมื่อกี้เราสร้างใช่ไหมคะ เราเอาข้อมูลหย่อยลงไปในช่องแรกแล้ว ที่ 2 นี่เป็นค่าทึบนะคะ ก็คือปิดมันไว้ ถ้าครูต้องการเชื่อม คราวนี้รถไฟมันต้องมีขบวนถูกหรือเปล่า จะไปคนเดียวไม่ได้ครูก็จะเชื่อคะบวนโดยเอา node อื่นนี่มาต่อท้าย โดยเอาโหนดอื่นมาต่อท้ายนะคะ ดดยเอาโเช่นครูต้องการเอา node 10 นี่ ตัวนี้มาต่อท้าย 7 นะคะ เอา 10 นี่ มาต่อท้าย 7 สมมุติครูมีถึงแค่ข้อมูล 7 ครูต้องการเอาโหนดที่ 3 นี่ ซึ่งเก็บข้อมูลต่อท้ายต่อจาก 7 นะคะ ดดยที่โหนดใหม่ที่ครูสร้างขึ้นก็คือโหนดข้อมูล 10 ถูกไหมคะ เรามีอะไรชี้อยู่ มี node 3 ชี้ออยู่ และที่ข้อมูล 7 นี่มีอะไรชี้อยู่นี่ อะไรชี้อยู่ก็คือโหนด 2 เราจะเชื่อมเอา 10 มาต่อท้าย 7 นะคะ อันนี้อะไรชี้อยู่คือ Node 2 มาอยู่ที่ช่องนี้ถูกไหม เราเริ่มต้นชี้ที่ช่องนี้ ก็เป็นโหนด 2 .ด้วยอะไรคะ next ชี้ไปที่ไหน ชี้มาตรงนี้นะคะที่ครูชี้อยูีแล้วมาตรงนี้อะไร ชี้อยู่ node3 มันก็เลยเป็นคำสั่ง node2.next Node2.nextชี้ไปที่ node3 ชี้อยู่นะคะ เดี๋ยวดุไปเรื่อย ๆ นะแปบหนึ่งนะคะถัดมา เมื่อกี้เราเชื่อไม่แล้วนะคะ การกำหนด head คือ หัว ครูบอกแล้วมันต้องอยู่ต้นลิสต์เลย head จะไปอยู่ที่อื่นไม่ได้เลย ตำแหน่งเดียวที่มันจะอยู่ได้ คือ ต้นลิสต์เท่านั้นมันจะไปชี้ที่ส่วนอื่นไม่ได้เลยนะ head ชี้อยู่ตรงไหน นั่นหมายความว่านั่นคือหัวขบวนนะคะ head อยู่ตรงไหนนั่นคือหัวขบวนเลย สมมติเรามีข้อมูลอยู่แล้วนะ ครุต้องการกำหนัดให้ headซึ่งข้อมูล 3 นี่มีอะไรชี้อยู่ มีอะไรชี้อยู่ก็คือ node1เพราะฉะนั้น ครูจะเอา head มาชี้ที่นี่ ครูเลยใช้คำสั่ง head = node 1 ชี้ที่ node1 ชี้อยู่นะคะ ถ้าสังเกตจะเห็นว่าพวกนี้คือตัวชี้ เอามาเท่ากันได้ คือตัวชี้เอามาเท่ากันได้ ครูย้อนกลับไป เห็นไหมคะข้างหลัง .next มันชี้ไปที่ไหน ชี้ไปที่ตัวชี้ แต่ถ้าเป็นลงท้ายด้วย .data เห็นไหมคะ คืออะไร ต้องเป็นข้อมูลเท่านั้น ถ้าตามหลังด้วย.data ต้องเป็นข้อมูลที่อยู่ในช่องนี้มาตอบเท่านั้น โอเค คราวนี้ ถ้าเราต้องการจะเข้าถึงข้อมูลจากลิงก์ลิสต์ที่ครูให้มาด้านบน ครูมีอยุ่ทั้งหมด 3 node ด้วยกัน ต้นลิสต์อยู่ซ้ายหรืออยู่ขวา อยู่ซ้ายถูกไหม รู้ได้อย่างไร เพราะว่ามันมีhead ชี้อยู่นะคะ เลยรู้ว่ามันอยู่ฝั่งโน่นนะ ครูมีตัวชี้อยู่ 3 ตัว นะคะ ที่ชี้อยู่ที่ node แต่ละตัว มี node1 node 2 c]นะคะ ข้อมูลตัวแรก node แรกข้อมูลหมายเลข 7 และ node หมายเลข 3 ตัวนี้ข้อมุลหมายเลข 10 รู้จากไหน มันอยู่ในช่อง data ใช่ไหม มันอยู่ในช่อง data คราวนี้ เชื่อมมาที่รู้ ได้อย่างไรอีก ก็ดูเส้นตัว next เห็นไหมคะ อันนี้ก็ดูที่เส้น next มันเชื่อมที่ตัวถัดถ้าเราต้องการเข้าถึงข้อมูลที่อยุ่ในลิ้งลินะคะ เช่น ครูเขียนคำสั่งแบบนี้ แล้วผลลัพธ์มันจะเป็นแบบไหน head.data เห็นไหมคะ ข้างหลังมันเป็นคำว่า "data" แสดงว่าต้องนำข้อมูลที่อยู่ในช่องฝั่งซ้ายมาตอย ชี้อยู่ตรงนี้ใช่ไหม head.data แล้ว data มันคืออะไร มันคือ 3 ดูต่อนะคะ head.next.data เท่ากับอะไร head อยู่ตรงนี้ .next มานี่แล้ว ถูกไหม แล้ว .data data ก็คือข้อมูล= 7 ดูต่อนะคะ head.next.nextแล้วค่อย .data head อยู่ที่นี่ .next ตัวที่ ตัวที่ 1 .next ตัวที่ 2 และ .data เพราะฉะนั้นตอบเท่ากับ 10 โอเคนะ ตัวถัดมาตัวนี้ ตัวนี้ node2node2 อยู่นี่ node2.next.data ตอบเท่ากับ 10 คนอื่นได้ไหม ได้ไหมคะnode2 เราอยู่ที่... เราเดินอยู่ที่นี่ next ก็คือเดินถัดไป next คือเดินถัดไป ถัดไปใช่หรือเปล่า เราเดินมาที่นี่แล้ว แล้วแล้ว10 เราก็จะตอบตรงนี้ว่า 10 นะคะ แล้วตัวนี้ล่ะ node1 อยู่ที่นี่ node1.next.data ตอบเท่ากับ... ตอบเท่ากับอะไรคะ 10 เหมือนกัน ได้ไหมnext คือ การเดิน เดินต่อไปอีกช่องหนึ่ง ถูกไหมคะ node 1 เราเริ่ม เราอยู่ที่ไหน node1 อยู่ที่นี่ พอเขาบอกว่า next เราก้ก้าวถัดมาเห็นไหมคะ มี next อีกตัวหนึ่ง แล้วก็ก้าวถัดมา .data แล้วถามว่าแล้ว .data ถ้าเป็น data มีค่าเท่ากับเท่าไร มีค่าเท่ากับ 10 นะคะถ้าครูถามต่อนะคะ ตัวหลังเริ่มเปลี่ยนแล้วนะคะ เดิมนี่ครูตั้งคำถามโดยตัวข้างหลังสุดนี่เป็น data ใชช่ไหมคะ ถามว่าเราจะเอาอะไรมาต่อถ้าลงท้ายด้วย data นี่ เอาข้อมูลมาตอบนะคะ เอาข้อมุลมาตอบ เอาข้อมูบที่อยู่ในช่องน่ะมาตอบ ถามใหม่ ถ้าครูเปลี่ยนเป็น head.next ครูเปลี่ยนใหม่ ถ้า head.next จะเป็นอะไร ตัวสุดท้ายต่างกันแล้วถูกไหมคะ ตัวสุดท้ายมันเป็น next แล้ว แสดงว่าสิ่งที่ตอบต้องเป้นตัวชี้ ตัวชี้ ถูกไหมคะ มีอะไรชี้อยู่ มีอะไรชี้อยู่ head.nexthead.next คือเดินมานี่แล้ว next คือการเดิน head.next มายืนตรงนี้แล้ว ครูไม่ได้ถาม.data ครูถาม head.next คืออะไร มันมาอยู่ตรงนี้แล้ว แล้วมันคืออะไรแล้วมันมีอะไรชี้อยู่ 2 ถูกไหมคะ คือ node2 เดี๋ยวลองดูอีกข้อหนึ่งนะเดี๋ยวครูจะให้ทำแบบฝึกหัด เดี๋ยวนะคะครูพยายามจะเขียนอันนี้ก่อน ตัวนี้ node2.next node2 อยู่ที่ไหน อยู่ตรงนี้ node2.next แล้วมันเดินไหม เดิมไหม next เดินมาที่นี่ อะไรคะ node3 node2.nextnode2.next อยู่ตรงนี้ อะไรชี้อยู่ node 3 นะคะ ใช่ 3 เฉย ๆ คือ node ต้องมี node ด้วยนะจะเห็นความต่างนะคะ ถ้าลงท้ายด้วย .data เอาข้อมูลมาใส่ ถ้าลงท้ายด้วย next หาตัวชี้ใช่ไหม หาตัวชี้มาใส่ คราวนี้เดี๋ยวครูมีแบบฝึกหัดให้อยู่ 6 ข้อ เดี๋ยวให้เพื่อนแจกแบบฝึกหัดที่ครูให้ไป แผ่นอื่นนะคะ ดูข้อแรกดูข้อที่ 1 อย่างเดียวเลย ใช่ พอเห็นขัอที่ 1แล้วนะคะ เห็นรูปลิงค์ลิสต์ไหม ในกระดาษที่ครูแจกจะมีรูปลิงค์ลิสต์รูปลิงก์ลิสต์นี้มีกี่โหนดคะ มีกี่โหนดตอบว่า 3 โหนด เห็นไหมคะ มีอยู่ 3 โหนดhead ชี้อยุ่ที่ไหนคะ head ชี้อยู่ที่ข้อมูล10 นะคะ head ชี้อยู่ที่ข้อมูลที่กับ 10 นะคะ อยู่ 6 ข้อ คล้าย ๆ แบบโจทย์บนกระดานเลย ลองทำดู มี 6 ข้อลองทำดูนะคะ (อาจารย์สุธาสินี) โอเคนะคะ เดี๋ยวมาดูเฉลยด้วยกัน ทีนี้ ดูนะคะ ครูมีโจทย์มาให้นะคะ เดี๋ยวครูเอาเส้นนี้ออกก่อน ครูมีโจทย์มาให้ จะมีอยู่ทั้งหมด 3 โหนดด้วยกัน มีโหนดข้อมูล 10, 20 แล้วก็ 30 นะคะ โหนดแรก รู้ได้อย่างไรว่ามีโหนดแรกอยู่ที่ไหนมี head ชี้อยู่มี headช ชี้อยู่ โหนดที่ 2 มี p ชี้อยู่ มี p ชี้อยู่นะคะ มี T ชมีอะไร ตัว q นะคะ ตัว q ชี้อยู่ ชี้เข้าๆไปที่โหนด q ชี้อยู่ โจทย์ข้อแรกhead.next นะคะ head ตัวหลัง แสดงว่าาต้องตอบเป็นตัวชี้แน่เลย ที่นี่ .next แปลว่า เดินไปอีก 1 ก้าว .next มาอยุ่ที่นี่ละนี่ที่ครูชี้อยู่นี่มีอะไรชี้อยู่ p ใช่ไหมคะมี p ชี้อนยู่ ถัดมา ถัดมา P.data ข้างหลังเป็น data แดสงว่าต้องเอาข้อมูลในช่องมาตอบ p อยู่นี่ .data ตอบเท่าไหน ตอบ = 20ถัดมา p.next.data เพราะฉะนั้น เราจะต้องหาจุดเริ่มต้น เอามือไปชี้ตัวแรกก่อน p.next next คือเดิน ถูกไหม เดินถัดมา .data เอาอะไรมาใส่ 30 โอเค ถัดมา q.next q อยู่ที่ไหน ตัวนี้ใช่ไหมคะ ตัวสุดท้ายเลยq ชี้อยู่ q.next next มันมีอะมันหยุดแล้ว เพราะฉะนั้น เราก็จะตอบว่ามันคือ null หรือ none ใช้ได้เหมือนกัน ว่าไม่มีอะไรต่อท้ายแล้วจบที่ต้องนี้แล้ว นะคะ จบ ถัดมา q.data q อยู่ไหน q อยู่นี่ .data เอาข้อมุลมาใส่เพราะฉะนั้นเอาข้อมูลมาตอบ 30 นะคะ ถัดมา มี next หลายตัวเลย head.next.next.data ที่นี่ .next ตัวที่ 1 เดินมา 1 ช่อง มี . next อีกใช่ไหมคะ .data เสร็จแล้วเอาข้อมูลมาใส่ ตอบ 30 โอเค ได้ไหม สมมติครูมีโจทย์ให้ข้อ 1 ช่วยครูตอบหน่อย จะตอบอะไรดี head.next.data ตอบอะไรคะ ช่วยครูดูหน่อย ดูบนกระดานเร็ว ตอบเท่ากับ...คนอื่นตอบอะไรคะ 20 ใช่ไหมคะ โอเค แปลว่าอะไร 20 อ๋อ อีกอันหนึ่งล่ะคะ p.next ตอบอะไรคะ ข้างหลังเป็น next แล้ว ต้องตอบตัวชี้นะคะ ต้องตp.next ไม่ใช่ตัวเลขแล้วนะ เพราะว่ามันไม่ได้ลงท้ายด้วย data นะมันลงท้ายด้วย next มัลงท้ายด้วย next เวลาตอบคือ มีอะไรชี้อยู่ p.next p.next ทำอย่างไรคะอ๋อ q ใช่ไหม ดูความต่างนะ ลองดูความต่างนี้กัน ถ้าลงท้ายด้วย .data data สิ่งที่เราเอามาเขียนคืออะไร ก็คือสิ่งที่อยู่ในช่อง เอาสิ่งที่คือ ข้อมูลใช่ไหมคะ แต่เมื่อไรก็ตามที่ตอบลงท้ายถ้าโจทย์ลงท้ายด้วย โอเค เห็นไหมคะ next เอาอะไรมาตอบ ตัวชี้ เอาตัที่ชี้น่ะมาตอบ โอเคนะคะ เมื่อกี้นะคะ คำสั่งพวกนี้เราสั่งให้วิ่งเข้าไปหาข้อมูลที่เราต้องการนะคะ เราสั่งให้ไปหาเดินตรง ไปที่ข้อมูลที่เราต้องการเลย แต่ถ้าเราบอกว่า เรายังไม่รู้เลยว่าในข้อมูลลิงก์ลิสต์นี่มีข้อมูลที่เราต้องการหรือเปล่า เราต้องเดินเข้าไปดุทีละอันทีละอันเราต้อง ไปดูทีละอันว่ามีข้อมูลที่เราต้องการหรือเปล่า ถ้าไม่ใช่ก็เดินไปตัวถัดไป ยังมีข้อมูลที่เราต้องการอยู่ไหม ถ้ายังไม่มีก็เดินไปตัวถัดไปนะคะ ถ้าเจอสิ่งที่เราต้องการแล้วเราก็จะพบ เหมือนเรากำลังค้นหาอะไรสักอย่างหนึ่ง แต่เราไม่รู้ว่ามันอยู่ที่ไหน เราต้องค่อย ๆ เข้าไปดูทีละห้อง ทีละห้อง ทีละห้องนะคะ แต่ถ้าเรารู้ว่า เช่น กระเป๋าเราเก็บอยู่ที่ห้องไหน เราก็เดินไปที่ห้องนั้นได้เลย แต่ถ้าเราไม่รู้เราก็ค่อย ๆ เปิดไปทีละห้อง ทีละห้อง ทีละห้องนะคะ การเข้าไปทีละห้องนี่ เราจะมีคำสั่งเรียก ก็คือการท่องเข้าไปในลิงก์ลิสต์นะ การท่องเข้าไปเยี่ยมเข้าไปหาในแต่ละช่องแต่ละช่อง คราวนี้ เวลาเราจะเข้าไปค้นข้อมูล หรือไปแต่ละโหนดแต่ละโหนดนะคะ เราจะไปหาของในแต่ละโหนด แต่ละโหนดนี่ ว่ามีของที่เราต้องการอยู่ไหม วิธีการอันนี้ลองดูนะ เราจะใช้คำสั่งการวนลูปการวนลูปทำซ้ำ เห็นไหมคะ การทำซ้ำเข้าไปเยี่ยมทีละโหนดทีละโหนด จนครบหรือจนกว่าเราจะเจอโหนดข้อมูลที่เราต้องการ คราวนี้ เวลาเราจะเดินไปในแต่ละโหนด เราจะมีตัวชี้นะคะ จะมีตัวชี้อยุ่ 1ตัว ที่พอตัวชี้ชี้ปุ๊บ เราเปิดเข้าไปดู ไม่มี ตัวชี้นี้ก็จะเดินไปตัวถัดไปนะคะ แล้วก็เปิดเข้าไปดู ตัวชี้นี้ก็จะไปดุที่โหลดถัดไปที่ห้องถัดไปตัวชี้เราจะมีชื่อว่า currentNode นะคะ คือ ตัวชี้คือตัวนี้ มีชื่อว่า currentNode เราเริ่มเดินจากไหนเราเริ่มเดินจากหัว หรือต้นลิสต์เลย เราเริ่มเดินตั้งแต่ต้นลิสต์เลยนะคะ ค่อย ๆ เดินเข้าไปทีละตัว เห็นไหม เราเริ่มต้น currentNode = headที่จะเข้าไปในแต่ละโหนดไปชี้เริ่มต้นอยู่ที่ head ชี้อยู่นะคะ เร็จแล้วก็วนไปเรื่อย ๆ จนถึงโหนดสุดท้าย โหนดสุดท้ายจะรู้ได้อย่างไร โหืnext จะเป็น None ถูกไหมคะ คือ ต้องชี้ไปที่โหนดเท่านั้นเราถึงจะวนไปเรื่อย ๆ พอเราชี้เราเปิดเข้าไปดูข้อมูล เสร็จแล้ว เราก็ขยับไปโหนดถัดไปก็คือ currentNode เดินไปที่ currentNode.next ก็คือโหลดถันะคะ โอเค คราวนี้มาดูครูจะลองเดินในแต่โหนดนะคะ เราจะลองเดินในแต่ละโหนด เริ่มต้นให้ currentNode อยู่ที่โหนดแรก ที่ต้นลิสต์เลยนะคะ currentNode ของเราไม่ได้เป็นค่าว่างเห็นไหม มันชี้อยู่ที่ต้นลิสต์ ข้อมูลออกมาก็คือจะได้ค่า 3 currentNode.data .data เอาข้อมูออกมา เสร็จแล้วเดินไปโหนดถัดไป ใช้คำสั่งอะไร ให้ currentNode เดิมจะชี้อยู่ที่นี่นะคะชี้อยู่ตรงเลข 3 currentNode.next ชี้อยู่ currentNode อยู่ตรงนี้ถูกไหม nมันชี้มาที่ไหน ชี้มาที่เลข 7 เพราะฉะนั้นเอา currentNode มาชนะคะ มันคือการขยับ currentNode ไปโหนดถัดไปโอเค เราก็ทำอย่างนี้ไปเรื่อย ๆ เข้าเยี่ยมได้ข้อมูลเบอร์ 7 แล้วเราก็ขยับ currentNodeมาตัวถัดไปเหมือนกันนะ ใช้คำสั่ง currentNode = currentNode.nextโอเค อันนี้คือการท่องเข้าไปในโหนดนะคะคราวนี้เราเข้าไปได้แล้ว เราเข้าไปได้แล้วเข้าไป เรามีโหนดข้อมูลใหม่เข้าไปแทรกในลิงก์ลิสต์ของเรานี่ เราสามารถแทรกมันตรงไหนได้บ้าง 1. ด้านหน้าสุด เห็นไหมคะ 2. ด้านท้ายสุด 3 แทรกเข้าไปตรงกลางเลย นะคะ คราวนี้ดูตัวแรก เราจะเพิ่มโหนดที่ต้นลิสต์ เราจะเพิ่มโหนดใหม่ที่ต้นลิสต์นะคะ อันดับแรกหาต้นโหนดให้เจอก่อน ต้นลิสต์ ให้เจอก่อน ก็คือที่ head ตอนนี้ head ชี้อยู่ที่ 3 นะคะ ดูนะ head ชี้อยู่ที่ 3 ครูมีโหนดใหม่ให้คือ 22 โหนดใหม่ครูคือ 22 มี p ชี้อยู่ ครูจะเอา 22 มาไมาไว้ด้านหน้า 14เอา 22 มาไว้ด้านหน้า 3 เราต้องสร้างเส้นนี้ เส้นนี้ ขึ้นมา ก็คือเพื่อเอา 22 นี่ ให้ตัวชี้มาที่เบอร์ 3เส้นนี้จะใช้คำสั่งอะไร เส้นสีแดง เส้นสีแดงเส้นนี้จะใช้คำสั่งอะไร โหนดนี่ ที่เรากำลังจะเชื่อมไปนี่ มันคือโหนดมีอะไรชี้อยู่ คือ p ถูกไหมคะ p.next เพราะว่ามันออกมาที่ช่องที่ 2 ชี้มาที่โหนดนี้ แล้วโหนดนี้มีอะไรชี้อยู่ head p.next=head เสร็จแล้วทำอะไร head มันมาอยู่ที่ 2 ใช่ไหม head มันมาอยู่ noแรกน่ะ มันถูกเปลี่ยนไปแล้ว มาชี้ที่โหนดแรก แล้วโหนดแรกอะไรชี้อยู่ คือ p เพราะฉะนั้น จะใช้คำสั่ง คือ head = pงงไหม เดี๋ยวนะคะ เดี๋ยวครูสร้างอันนี้ให้คราวนี้ดูสมมติครูมีลิงก์ลิสต์มาใช่ไหมคะ แล้วลิงก์ลิสต์ เห็นไหมคะ ตัวแรกมีข้อมูล 6 ตัวที่ 2 มีข้อมูล 7 นะคะ ครูบอกว่าอยากจะเอาโหนดใหม่นี่ ที่ครูสร้างขึ้นนี่ที่มีตัว t ชี้อยู่เดี๋ยวครูทำใ้หใหญ่ ๆ ก่อน ที่มีตัว t ชี้อยู่นะคะตัว t ชี้อยู่ นี่คือโหนดใหม่นะ ตัวนี้คือโหลดใหม่คือโหนดที่ครูพึ้งสา้รนสร้างขึ้น ครูอยากจะเอาโหนดนี้มาไว้ด้านหน้าหมายเลข 6 ทำอย่างไรเอ่ย เอาโหนดใหม่นี่มาไว้ด้านหน้าหมายเลข 6 นะคะ อันดับแรก สิ่งแรกวาดเส้นเชื่อมก่อน วาดเส้นเชื่อมก่อนนะคะ มันจะเชื่อมอย่างไร เราก็ออกจากจุดนี้ เชื่อมมาที่นี่เดี๋ยวนะ ครูวาดใหม่ดีกว่า มันจะต้องมาอยู่ข้างหน้าใช่หรือเปล่า ครูก็วาดแบบนี้ ใช่ไหม ถ้าเราดูดี ๆ นะคะ จะยก 3 มาไว้ข้างหน้าใข่ไหม เพราะว่าหัวลูกศรนี่ อันนี้คือหัวลูกศรนะคะ หัวลูกศรจะชี้มาที่ข้อมูลหมายเลข 6 แล้วเส้นนี้จะชื่ออะไร มันออกจากจุดไหนคะ ตรงนี้ ออกจากจุดช่องนี้ แล้วช่องที่ครูจุดอยู่นี่ ตัวนี้มันมีอะไรชี้อยู่ ก็คือ t ใช่ไหมคะ t.nextรู้ได้อย่างไรว่าเป็น next ก็มันมาจากช่องที่ 2 น่ะ มันมีชื่อว่า next ใช่ไหมคะ ชื่อว่า data ใช่ไหมคะ ช่องที่ 2 มีชื่อว่า next เท่ากับชี้มาที่หมายเลข 6 แล้วหมายเลย 6ชี้อยู่ มี head ใช่ไหมคะ เสร็จหรือยัง ยังเราต้องย้าย head ถูกไหมคะ head มันต้องชี้ทีนี้เพราะมันคือต้นลิสต์แล้ว ตอนนี้ เพราะฉะนั้น มันก็คือให้ head ชี้ที่ไหนคะ ชี้ที่ t จดตัวนี้ไว้ให้ครูหน่อย มีกระดาษไหมคะ เขียนด้านหลังกระดาษที่ครูแจกได้เลยลองจดตัวนี้สิคะ แล้วลองวาดรูปนะ ถ้ามีปากกาสี ก็น่าจะดีนะคะ เส้นเชื่อมใหม่ที่เราวาดนี่ น่าจะเป็นอีกสีหนึ่งเราจะได้รู้ว่าอันนี้คือเส้นใหม่ที่เราเพิ่มเข้าไป และเราต้องเขียนคำสั่ง เดี๋ยวรอแป๊บหนึ่งนะคะ เดี่ยวครู Swit อุปกรณ์โอเค อันนี้มันไม่ขึ้นน่ะ ไม่ขึ้นคะแต่ครูขึ้นอยู่นะ โอเคนะคะ รูปนี้จะเป้นการเพิ่มข้อมูลที่ต้นลิสต์ นที่ต้นลิสต์นะคะ อันนี้คือข้อมูลใหม่นะ 3 นี่คือข้อมูลใหม่เอาไปแทรกไว้ข้างหน้านะคะ โดยของเดิมนี่จะมีอยู่แล้วนะคะ คือข้อมูลคือ6 กับ 7 อันดับแรก ข้างหน้าอันดับแรก ครูวาดเส้นเชื่อมก่อน ถ้าเราเห็นเส้นเชื่อมเราจะเข้าใจมากขึ้นว่าเส้นเชื่อมจุดเริ่มต้นจากไหนไปที่ไหน ครูต้องการเอา 3 ไปไว้ข้องหน้า นี่ออกจาก 3 ส่วนของ next นะ ชี้ไปที่ 6 นะคะ เขียนคำสั่งคืออะไร t.next ชี้ไปที่ head ชี้อยุ่คือเส้นนี้ จุดเริ่มต้นมันอยู่ตรงนี้ แล้วโหนดนี้อะไรชี้อยู่คือ t.next ชี้ไปที่ head จากนั้น head = tก็คือย้าย head มาชี้ที่ t ชี้อยู่นะคะ เอา head มาชี้ที่ต้นลิสต์ ก็คือโหนดใหม่ ถัดมา ครูจะเพิ่มข้อมูลใหม่ที่ด้านท้ายลิสต์นะคะ ด้านท้ายลิสต์เป็นยังไงของเดิมน่ะมันจะเป็น เส้นถูกไหม เส้นปิดนะคะ เส้นปิด ก็คือตัวท้ายสุดแล้ว ครูจะเอา node99 นะคะ ครูจะเอาโหนด 99 นี่ที่ด้านท้ายเดี๋ยวเราเชื่อมเลย ตัวโหนดสุดท้ายนี้ เรามีตัวชี้ที่ชื่อว่า currentNode ชี้อยู่ เราจะเชื่อมจาก node 10 มาที่99 เราก็วาดเส้นเชื่อมถูกไหมคะ ออกจากส่วนของ next ของเบอร์ 10 ชี้ไปที่ 99 เส้นนี้จะเขียนคำสั่งว่าอะไร มันออกจากโหนดนี้ถูกหรือเปล่า เส้นจุดเริ่มต้นของตัวเชื่อมนี่มันออกจากโหนดนี้ที่มีชื่อว่า นะคะ มันออกจากส่วนไหน .next นะคะ .next ชี้มาที่นี่ชี้มาที่ 99 แล้ว 99 อะไรชี้อยู่ p ดังนั้นจะเขียน คำสั่งได้เป็น currentNode..next= pคือ เส้นนี้นะคะ เส้นนี้มันออกมาจาก node 10 นี่แล้ว node 10 อะไรชี้อยู่ . ส่วนที่ 2 ส่วนตรงนี้มีชื่อว่า nextเลยเป็น currentNode.next ชี้มาที่ไหน ชี้มาที่ p ชี้อยุ่ก้คือ 99 แทรกตรงกลางบ้างมีหัวมีท้ายแล้ว แทรกตรงกลางบ้างนะคะ ต้องการเอา 55 นี่ มาแทรกอยู่ระหว่าง 7 กับ 10 คือแทรกตรงกลางระหว่าง 7 กับ 10 แทรกตรงกลางเลยระหว่าง 7 กับ 10 ทำอย่างไร ก็ต้องเขียนเส้นใหม่ต้องไม่มีเส้นตรงนี้แล้ว เส้นเชื่อมระหว่าง 7 กับ 10 แล้ว ต้องวาดเส้นใหม่จาก 7 ต้องมา 55 แล้วจาก 55 ถึงค่อยมาที่ 10 เขียนคำสั่งยังไง เส้นแรกออกจากไหน ออกจากตรงนี้ ตัวนี้มีอะไรชี้อยู่ previousNodepreviousNode.next คือ ส่วนนี้ ชี้มาที่ไหน ชี้มาที่นี่แล้วอะไรชี้อยู่ pได้เป็น previousNode.next = p =p เส้นที่ 1 นะคะ เส้นถัดมาจาก 55 เชื่อมไปที่ 10 นะคะ จุดเริ่มต้นออกจาp.next ชี้ไปที่ 10 แล้ว 10 มีอะไรชี้อยู่ currentNode นะคะ เลยได้เป็น p.next=currentNodeคราวนี้เอาใหม่ เอาใหม่นะ สมมติว่าครูมีโหนดใหม่ นะคะ คราวนี้นะคะ สมมติว่าครูมีลิ้งก์สลิสต์มาให้ ข้างบนนี้นะคะ ครูมีโหนดใหม่ก็คือโหนดข้อมูล 30 ครูอยากเอา 30 ไปต่อท้าย 70 ทำยังไงดี ต่อท้าย 70 อันดับแรกครูต้องวาดก่อน เอา 30 ไปต่อท้าย 70 แดงว่าต้องชี้มาที่ 30 ถูกไหม เอา 30 มาต่อท้าย 7 นะคะ 30 มาต่อท้าย 7 ก็คือลากจาก 7เชื่อมมาที่ 30 เส้นนี้จะใช้คำสั่งอะไรมันออกจาก จุดนี้ถูกไหมคะ ตรงจุดข้อมูล 7 นี่ แล้ว 7 มีอะไรชี้อยู่คือ p p. อะไร ช่องนี้มีชื่อว่าอะไรคะ next นะnext ชี้มาที่ไหน ชี้มาที่ 30 แล้ว 30 มีอะไรชี้อยู่ q โอเค ตัว qนะคะ ลองลอกให้ครูหน่อย จดไว้ในสมุดนะคะได้ไหมคะ เรียบร้อย คราวนี้ เพิ่มหัวเพิ่มท้ายแล้วใช่ไหม คราวนี้ครูอยากจะแทรก 30 ไปตรงกลาง ครูอยากจะแทรก 30 ไปตรงกลาง ทำอย่างไรดี จะเอา 30 นี่แทรกตรงกลาง ครูวาดรูปก่อนเลยดีไหมนะคะ เส้นนี้จะต้องหายไปนะ ครูไม่มียางลบครูก้ขีเค่าไว้ก่อน 30 ใช่ไหม แล้วจาก 30 ชี้ไปที่ไหน ชี้ไปที่ 7นะคะ ครูวาดเส้นก่อนเลย แล้วครูก็ขีดค่าเส้นตรงกลสไม่เอาแล้ว เดี๋ยวดูพร้อมกันก่อนนะ เดี๋ยวครูให้จด เดี๋ยวครูให้จดค่ะ เส้นแรก มัน ออกมาจากโหนดข้อมูล 3 นะคะ โหนดนี้อะไรชี้อยู่ คือ head ชี้อยู่ head. อะไรคะนะ head.next ชี้มาที่ไหน = ชี้มาที่ 30 แล้ว 30 อะไรชี้อยู่ q โอเคเส้นที่ 2 มันออกมาจากโหนด 30 ใช่ไหมคะแล้วตรง 30 อะไรชี้อยู่ q.next ชี้มาที่ 7 แล้ว 7 มีอะไรชี้อยู่ แล้ว 7 มีัอะไรชี้อยู่โอเคเดี๋ยวลอกไว้ เดี๋ยวครูให้ทำแบบฝึกหัดอีก 2 ข้อ เสร็จแล้วใช่ไหมคะ ดู Sheet ที่ครูแจกให้เมื่อกี้หยิบขึ้นมาเลยค่ะ ดูข้อ 2 กับข้อ 3 นะคะ ที่เราจะได้ ณ เวลานี้ ข้อ 2 นะคะ ครูให้เวลาอ่านโจทย์ 2 นาที อ่านโอ่านของใครของมันก่อนเร็ว อ่านก่อนหยิบขึ้นมาแล้วนั่งอ่านก่อนนะคะ สิคะ ข้อ 2 ครูสั่งให้ทำอะไร ในโจทย์นะคะ ต้องการ เชื่อมโหนดใหม่ โหนดใหม่ที่ครูให้มานี่ จะเป็นดหนดที่มีตัวชี้ p ชี้อยู่นะคะ ให้เอา node53 นะคะ ที่ p ชี้อยู่ ให้เอาโหนด 53 นะคะที่มี p ขเอามาไว้เป็นโหนดแรกของลิงก์ลิสต์ เราจะเขียนคำสั่งอย่างไรโดยให้วาดรูปเส้นเชื่อมด้วยนะคะ ให้วาดรูปเส้นเชื่อมก่อน จากนั้น เส้นที่เราใส่เข้าไปใหม่นั้นน่ะ เราเขียนด้วยคำสั่งอะไรคะ นี่ข้อ 2 นะ เดี๋ยวดูพร้อมกันก่อนนะคะ เปิดไปดูข้อ 3 เปิดไปหน้าที่ 2 ค่ะ ข้อนี้ครูต้องการที่จะ เชื่อมโหนดใหม่ใช่ไหมคะ ระหว่าง 20 กับ 30 ต้องการเชื่อมโหนดใหม่นะคะ เอาไปไว้ระหว่าง 20 กับ 30 จะแทรกอย่างไรให้เขียนคำสั่งด้วยนะคะ ลองทำ 2 ข้อ ใครทำเสร็จแล้ว ครูจะให้เบรก