最近ã¯æ§˜ã€…ãªè¨€èªžãŒã‚ã‚Šã€æ•¢ãˆã¦C/C++ã‚’å¦ã°ãªãã¨ã‚‚プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®ä¸–ç•Œã«å…¥ã£ã¦ã„ã‘るよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“ã“ã§ç¾æ™‚点ã«ãŠã„ã¦C/C++ã‚’å¦ã¶ã¹ããªã®ã‹ã€åˆ©ç‚¹ã‚’考ãˆã¦ã¿ãŸã„ã¨æ€ã„ã¾ã™ã€‚
ãƒã‚¤ãƒ³ã‚¿
ãƒã‚¤ãƒ³ã‚¿ã¯C/C++ã‚’å¦ç¿’ã™ã‚‹ã«å½“ãŸã£ã¦å¤šãã®äººãŒæœ€åˆã«éé‡ã™ã‚‹éšœå£ã¿ãŸã„ãªã‚‚ã®ãªã®ã§ã™ãŒã€ã“ã‚ŒãŒC/C++ã®é›£è§£ã•ã¨å¼·åŠ›ã•ã‚’醸ã—出ã—ã¦ã„ã‚‹è¦ç´ ã§ã™ã€‚
例ãˆã°C#ã§Listクラスã«ãŠã„ã¦è¦ç´ ã‚’å–り除ãã€RemoveメソッドãŒã‚ã‚Šã¾ã™ãŒã€C#ã§ã¯list.Remove(3)
ãªã©ã¨ã™ã‚‹ã¨ä¸€è‡´ã™ã‚‹æœ€åˆã®è¦ç´ ãŒå–り除ã‹ã‚Œã¾ã™ã€‚(ã¡ãªã¿ã«ã“ã‚Œã¯List
ã®å ´åˆã§ã™ã€‚C#ã§ã¯ã‚る数値ã®ãƒªã‚¹ãƒˆã®æœ€åˆã®å‡ºç¾ç®‡æ‰€ã‚’一行ã§å–り除ã‘ã‚‹ã€ã¨ã„ã†ã“ã¨ã«æ³¨ç›®ã—ã¦ä¸‹ã•ã„。)
ã“れをC/C++ã§å®Ÿç¾ã—よã†ã¨ã™ã‚‹ã¨æ¬¡ã®ã‚ˆã†ãªå‡¦ç†ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚
å‰æ:å„ノードã¯æ¬¡ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã«ãªã£ã¦ã„ã¾ã™ã€‚
struct node { int value; struct node *next; };
ã“ã‚Œã¯æ•°å€¤ã¨æ¬¡ã®ãƒŽãƒ¼ãƒ‰ã¸ã®ãƒªãƒ³ã‚¯ã‚’æ ¼ç´ã—ãŸé€£çµãƒªã‚¹ãƒˆã§ã™ã€‚valueã«å€¤ãŒæ ¼ç´ã•ã‚Œã€æ¬¡ã®ãƒŽãƒ¼ãƒ‰ã¸ã®ãƒªãƒ³ã‚¯ã¯nextã«æŒ‡å®šã•ã‚Œã¾ã™ã€‚
- 最åˆã®ãƒ‡ãƒ¼ã‚¿ãƒŽãƒ¼ãƒ‰ã‚’èªã¿è¾¼ã¿æ•°å€¤ã‚’比較ã™ã‚‹
- 該当ã—ãªã‘ã‚Œã°æ¬¡ã®ãƒŽãƒ¼ãƒ‰ã«ç§»ã‚‹
- ä¸Šè¨˜äºŒæ‰‹é †ã‚’è©²å½“ãŒã‚ã‚‹ã¾ã§ç¹°ã‚Šè¿”ã™ï¼ˆæ¬¡ãƒŽãƒ¼ãƒ‰ãŒNULL判定ã§ã‚ã‚Œã°åœæ¢ï¼‰
- 該当ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®å‰ã®ãƒŽãƒ¼ãƒ‰ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–得(もã—ãã¯ä¸Šè¨˜ã«è¾¿ã‚‹éš›ã«äºˆã‚å‰ãƒŽãƒ¼ãƒ‰ã‚’別値ã«è¨˜æ†¶ã•ã›ã¦ãŠã)
- 該当ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®æ¬¡ã®ãƒŽãƒ¼ãƒ‰ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–得(ã“ã¡ã‚‰ã¯è©²å½“ノードã®æ¬¡ã®ãƒŽãƒ¼ãƒ‰ã¸ã®ãƒªãƒ³ã‚¯ã€nextãŒã‚ã‚‹ã®ã§æ•¢ãˆã¦åˆ¥é€”å–å¾—ã™ã‚‹å¿…è¦ã¯ãªã—)
- 該当ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®å‰ã®ãƒŽãƒ¼ãƒ‰ã®nextã«æŒ‡å®šã•ã‚Œã¦ã„るアドレスを該当ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®æ¬¡ã®ãƒŽãƒ¼ãƒ‰ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定
- 該当ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®ãƒ¡ãƒ¢ãƒªã‚’解放
ã¨ã„ã†æ‰‹é †ã«ãªã‚Šã¾ã™ã€‚