้“พ่กจ๏ผˆLinked List๏ผ‰ ๆ˜ฏ้€š่ฟ‡ๆŒ‡้’ˆๅฐ†ไธ€ไธชไธ€ไธช Node ้“พๆŽฅๅœจไธ€่ตท็š„ๆ•ฐๆฎ็ป“ๆž„๏ผŒ้€š่ฟ‡ไธ‹ๅ›พๅฏไปฅ็›ด่ง‚ๆ„Ÿๅ—๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Node  โ”‚    โ”‚ Node  โ”‚    โ”‚ Node  โ”‚    โ”‚ Node  โ”‚
โ”‚-------โ”‚    โ”‚-------โ”‚    โ”‚-------โ”‚    โ”‚-------โ”‚
โ”‚ Data  โ”‚    โ”‚ Data  โ”‚    โ”‚ Data  โ”‚    โ”‚ Data  โ”‚
โ”‚       โ”‚    โ”‚       โ”‚    โ”‚       โ”‚    โ”‚       โ”‚
โ”‚ Next ----> โ”‚ Next ----> โ”‚ Next ----> โ”‚ None  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Head         Node1       Node2       Tail

้“พ่กจ็”ฑ Node ็ป„ๆˆ๏ผŒ ๆฏไธช Node ๅŒ…ๅซไธค้ƒจๅˆ†๏ผŒๆ•ฐๆฎ (data) ไธŽๆŒ‡ๅ‘ไธ‹ไธ€่Š‚็‚น็š„ๆŒ‡้’ˆ (Next) ใ€‚

้“พ่กจๅœจ็”Ÿๆˆไน‹ๅŽๆˆ‘ไปฌๅช้œ€ไฟๅญ˜ไธ€ไธชๆŒ‡ๅ‘ Head ่Š‚็‚น็š„ๆŒ‡้’ˆ๏ผŒๅ…ถไป–่Š‚็‚น้œ€่ฆ้ ๆŒ‡้’ˆ้ๅކๆฅ่ฎฟ้—ฎ๏ผŒ่ฟ™ๅฏผ่‡ด้“พ่กจ็š„่ฎฟ้—ฎๆ—ถ้—ดๅคๆ‚ๅบฆไธบ ๏ผŒไฝ†ๆ’ๅ…ฅๅˆ ้™คๆ“ไฝœ็š„ๆ—ถ้—ดๅคๆ‚ๅบฆไธบ ใ€‚

Tip

Lisp ๅ’Œ Haskell ไธญ็š„ๅˆ—่กจๅคšไธบ้“พ่กจๅฎž็Žฐใ€‚

้“พ่กจๅค„็†ไธญๅธธ็”จๆŠ€ๅทง

Dummy Head

ไนŸๆœ‰ๅซๅ“จๅ…ตๆŠ€ๅทง็š„๏ผŒๅฐฑๆ˜ฏๅœจๅค„็†้“พ่กจ็š„่ฟ‡็จ‹ไธญๅœจ้“พ่กจ็š„ Head ไน‹ๅ‰ๅ†ๅŠ ๅ…ฅไธ€ไธช่Š‚็‚น Dummy Head๏ผŒๆŒ‡ๅ‘ Head๏ผŒๅœจๅค„็†ๅฎŒไน‹ๅŽ็›ดๆŽฅไฝฟ็”จ dummy.next ๅฐฑ่ƒฝๆ‹ฟๅˆฐๆœ€ๆ–ฐ็š„ head๏ผŒไธ็”จๅœจๅค„็†็š„่ฟ‡็จ‹ไธญไธ€็›ด่ฟฝ่ธช head ๅœจๅ“ชๅ„ฟใ€‚

dummy -> elem1(head) -> elem2 -> nil

ๅฟซๆ…ขๆŒ‡้’ˆ

็”จไบŽๆ‰พๅฏป้“พ่กจ็š„ไธญ็‚นๆˆ–้ชŒ่ฏ้“พ่กจไธญๆ˜ฏๅฆๅญ˜ๅœจ็Žฏ๏ผŒ่ฎพ็ฝฎไธคไธชๆŒ‡้’ˆ slow ๅ’Œ fast, slowๆฏๆฌก็งปๅŠจไธ€ๆญฅ๏ผŒ fast ๆฏๆฌก็งปๅŠจไธคๆญฅ๏ผŒ่ฟ™ๆ ทๅฝ“ fast ็งปๅŠจๅˆฐ้˜Ÿๅฐพๆ—ถ๏ผŒslow ๅˆšๅฅฝ็งปๅŠจๅˆฐไธญ็‚น็š„ๅ…ƒ็ด ใ€‚

  • ๅฏนไบŽๅฅ‡ๆ•ฐ้•ฟๅบฆ็š„้“พ่กจ๏ผŒslow ๆœ€ๅŽๆŒ‡ๅ‘็š„ๅ…ƒ็ด ไธบ .
  • ๅฏนไบŽๅถๆ•ฐ้•ฟๅบฆ็š„้“พ่กจ๏ผŒslow ๆœ€ๅŽๆŒ‡ๅ‘็š„ๅ…ƒ็ด ไธบ .

ๆ— ่ฎบๆ˜ฏๅฅ‡ๆ•ฐ่ฟ˜ๆ˜ฏๅถๆ•ฐ๏ผŒๅณๅŠ้ƒจๅˆ†็š„ head ้ƒฝไธบ slow.nextใ€‚