C#を使用して単独リンクリストを実装しました。誰でも次のコードを見て、私が間違っている場所を提案してもらえますか?C#を使用した単独リンクリストの実装 - RemoveLastメソッド
public int RemoveLast()
{
if (Head != null)
{
var curNode = Head;
while (curNode.Next != null)
{
curNode = curNode.Next;
}
var lastNodeValue = curNode.Value;
curNode = null;
Size--;
return lastNodeValue;
}
return -1;
}
この機能では、最後のノードは削除されません。私は何が間違っているのか理解できません。 whileループが終了すると、次のノードがnullのcurNodeにnodeの参照があります。これが最後のノードであることを意味します。最後に、このノードをnullに設定しています。しかし、私は表示機能を使用します。最後のノードも表示されます。これは、最後のノードを削除していません。あなたは前のノード上のcurNode.Next値がnullにする必要があり
public string Display()
{
if (Head == null)
{
return string.Empty;
}
var curNode = Head;
var builder = new StringBuilder();
while (curNode.Next != null)
{
builder.Append($"{curNode.Value} ");
curNode = curNode.Next;
}
builder.Append($"{curNode.Value} ");
return builder.ToString();
}
あなたはあなたのcurrNodeを消去しています。リストから何も削除されません。期待される賞賛。最後のノードを削除するには、*最後の* Nodeの 'Next'プロパティをクリアする必要があります。 – Fildor
'.Next'プロパティをnullに変更していません。ローカル参照をnullに変更するだけです。 –
私の推測では、curNodeはリスト要素のローカルコピーです。実際のリスト要素ではありません。 curNodeをvarにすると、その型が曖昧になります。あなたは、明示的なタイピングによってそれを報復するべきです。 Tahtはまさにvarを使わないべきケースです。 – Christopher