考察1

@IT の投稿は、すでに4ページをこえているので、答えが書いてありそうだから読まない(苦笑
コメントにもあるように、リスト構造に対して手を加えずマーキングを実施することは不可能ではなく、そんなことお手軽にできるライブラリもごまんとある。しかし、元記事がそんなに面白みのない結果で満足するわけがない。(と勝手に決め付ける)
単方向リンクリストのエラー状態には、循環*1と分断*2があり、これらの検出はリンクリストを使用したプログラムの開発・保守を行うときに必須になるだろう。
さて、循環の検出には、ある特定のノード A からリンクを辿ることで、再びノード A に戻ってくることで検出できる。

// code coloring/formated by http://manoli.net/csharpformat/
static bool HasLoop(LinkList node)
{
  foreach (LinkList cur in node.Walk())
  {
    if (cur == node) return true;
  }

  return false;
}

もちろん、このコードじゃループを完全に検出することはできない。これは検査対象であるノード node がループに巻き込まれている場合は true を戻すことができるが、巻き込まれていなければ false を戻そうとして無限ループに陥る可能性がある。その無限ループを避けるためには、node に対する検査を実施する前に node.Next に対する検査が必要になり効率的にやろうとするとマーキングの手法になってしまう。すぐに思いつく案として、node を検査する際に node.Next に対して再帰的な検査を実施することが考えられる。

*1:参照が循環しリンクリストの終端が失われた状態

*2:リストに穴ができリストが2つ以上に分割され先端が失われた状態