25
จะตรวจจับลูปในรายการที่เชื่อมโยงได้อย่างไร?
สมมติว่าคุณมีโครงสร้างรายการเชื่อมโยงใน Java มันประกอบไปด้วยโหนด: class Node { Node next; // some user data } และแต่ละโหนดชี้ไปที่โหนดถัดไปยกเว้นโหนดสุดท้ายซึ่งมีค่า null สำหรับถัดไป สมมติว่ามีความเป็นไปได้ที่รายการสามารถมีลูป - เช่นโหนดสุดท้ายแทนการมีค่า null มีการอ้างอิงถึงหนึ่งในโหนดในรายการที่มาก่อนมัน เป็นวิธีที่ดีที่สุดในการเขียนอะไร boolean hasLoop(Node first) ซึ่งจะกลับมาtrueถ้าโหนดที่กำหนดเป็นคนแรกของรายการที่มีวงและfalseอื่น ๆ ? คุณจะเขียนอย่างไรเพื่อให้มีเนื้อที่คงที่และใช้เวลาพอสมควร นี่คือภาพของรายการที่มีลักษณะเป็นวง: