「Unicode 文字のリンク リストで繰り返し要素を見つけます。Unicode 文字に重複が見つかった場合は、その繰り返しノードを削除してリストを調整します。制約は、余分なメモリを使用しないことでした。」</p>
私の答え:
Unicode char にサロゲート ペア char が含まれていないと仮定すると、C# を使用しているため
リストをたどる際に前のノードの値を知っていない限り、重複する文字を見つける方法がわかりません。以前の値を維持するには、追加のメモリ (ハッシュ テーブル) が必要になります。
皆さん、この質問に対する解決策を思いつくことができますか? あるサイトでのインタビューの質問です。また、これを O(n) 時間で解決することは可能ですか?
これが私の実装です。より良いものにするために、フィードバックをいただけますか?
public static void RemoveDup(Node head)
{
Node current1 = head;
Node current2;
while (current1 != null)
{
current2 = current1;
while (current2 != null)
{
if (current2.Next!=null && current1.Data == current2.Next.Data)
{
Node temp = current2.Next.Next;
current2.Next = temp;
current2=current1;
continue;
}
current2 = current2.Next;
if (current2 == null)
break;
}
current1 = current1.Next;
if (current1 == null)
break;
}
}