ในการสัมภาษณ์ Slashdot Linus Torvalds อ้างว่า:
ฉันเห็นคนจำนวนมากเกินไปที่ลบรายการที่ลิงก์แบบเอกเทศโดยติดตามรายการ "ก่อนหน้า" จากนั้นลบรายการทำสิ่งที่ชอบ
ถ้า (prev)
prev-> next = entry-> next;
else
list_head = entry-> ถัดไป;และเมื่อใดก็ตามที่ฉันเห็นรหัสเช่นนั้นฉันเพิ่งไป "คนนี้ไม่เข้าใจตัวชี้" และเป็นเรื่องธรรมดาที่ค่อนข้างเศร้า
ผู้ที่เข้าใจพอยน์เตอร์เพียงใช้ "ตัวชี้ไปยังตัวชี้รายการ" และเริ่มต้นด้วยที่อยู่ของ list_head และเมื่อพวกเขาเข้าไปในรายการพวกเขาสามารถลบรายการโดยไม่ต้องใช้เงื่อนไขใด ๆ เพียงแค่ทำ "* pp = entry-> next"
ในฐานะนักพัฒนา PHP ฉันไม่ได้สัมผัสพอยน์เตอร์ตั้งแต่รู้เบื้องต้นเกี่ยวกับ Cในมหาวิทยาลัยเมื่อสิบปีก่อน อย่างไรก็ตามฉันรู้สึกว่านี่เป็นสถานการณ์ประเภทที่ฉันควรทำความคุ้นเคยเป็นอย่างน้อย Linus กำลังพูดถึงอะไร ความจริงแล้วถ้าฉันถูกขอให้นำลิสต์ที่เชื่อมโยงและนำไอเท็มออกวิธีที่ 'ผิด' ข้างต้นเป็นวิธีที่ฉันจะทำ ฉันต้องรู้อะไรบ้างในการเขียนโปรแกรมเนื่องจาก Linus บอกว่าดีที่สุด
ฉันถามที่นี่มากกว่า Stack Overflow เพราะฉันไม่ได้มีปัญหากับรหัสการผลิต
prev
แทนที่จะเก็บโหนดทั้งหมดคุณสามารถจัดเก็บตำแหน่งได้prev.next
เนื่องจากเป็นเพียงสิ่งเดียวที่คุณสนใจตัวชี้ไปยังตัวชี้ และถ้าคุณทำเช่นนั้นคุณจะหลีกเลี่ยงความโง่เขลาif
ตั้งแต่ตอนนี้คุณไม่มีกรณีที่น่าอึดอัดใจในlist_head
การเป็นตัวชี้จากภายนอกโหนด ตัวชี้ไปยังส่วนหัวของรายการนั้นจะมีความหมายเหมือนกับตัวชี้ไปยังโหนดถัดไป