ในทำนองเดียวกับการแทรกโหนด เราสามารถใช้เพียงพอยเตอร์เดียว คือ star เพื่อท่องเข้าไปหาโหนดที่ต้องการลบ เมื่อพบแล้วใช้ให้ฟิลด์ back ของโหนดที่ต้องการลบคือโหนด start จัดการเปลี่ยนค่าในฟิลด์ next ของโหนดก่อนหน้าให้ย้ายข้ามโหนดที่ไม่ต้องการชี้ไปยังโหนดที่ไม่ต้องการไปชี้ยังโหนดถัดไป ดังภาพ
n Suda n Arun Dara
start
ต้องใช้ 2 คำสั่งเพื่อการลบโหนด start คือ
Start -> back -> next = start -> next ;
Start -> next -> back = start ->back;
ต่อไปนี้เป็นตัวอย่างฟังก์ชัน deleteNode เพื่อลบโหนดที่ไม่ต้องการออกจากลิงค์ลิสต์แบบโยงคู่
ตัวอย่าง การเขียนฟังก์ชัน deleteNode เพื่อลบโหนดที่ไม่ต้องการออกจากลิงค์ลิสต์แบบโยงคู่ ซึ่งมี head ชี้อยู่ที่โหนดแรก
Void deleteNode (Ptr **head, ItemType target)
{
ptr *start ;
start = *head ;
while ((strcmp(start -> name, target) ! = 0 && (start -> next ! = NULL))
start = start -> next ;
if (strcmp(start -> name, target) ! = 0) /*กรณีไม่พบโหนด*/
printf(Record not found! ”) ; /*ที่ต้องการลบ*/
else
{
if ((start -> back = = NULL)&&(start -> next = = NULL))
*head = NULL ;
else
if (start -> back = = NULL)
{
*head = start -> next ;
start -> next -> back = NULL ;
}
else
if (start -> next = = NULL)
start -> back -> next = NULL ;
else
{
start -> back -> next = start -> next ;
start -> next -> back = start -> back ;
}
delete start ;
}
} /*deleteNode*/
สวัสดีคะ น้องระพีพร
พี่เป็นผู้ดูแลเว็บไซต์คะ และได้ลองอ่านบันทึกทั้งหมดในบล็อกของน้องแล้ว คิดว่าวัตถุประสงค์ของการใช้งานบล็อกของน้อง คงจะเพื่อการส่งการบ้าน หรือส่งงานให้อาจารย์
พี่รบกวนน้องย้ายบล็อกเพื่อส่งการบ้านไปยัง http://learners.in.th คะ ซึ่งใช้งานเช่นเดียวกัน GotoKnow.org
โดย Learners.in.th นั้น เป็นบล็อกเพื่อการเรียนการสอน ดังนั้นน้องๆ นักศึกษาสามารถเขียนบล็อกเพื่อส่งงานที่นี่ได้คะ
สำหรับ GotoKnow.org เป็นบล็อกที่มีวัตถุประสงค์สำหรับการแลกเปลี่ยนประสบการณ์คะ