ในทำนองเดียวกับการแทรกโหนด  เราสามารถใช้เพียงพอยเตอร์เดียว  คือ  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*/