/***********************************************/
/*★ List に登録されたセルを削除 前田 稔 ★*/
/***********************************************/
using System;
class console
{
public static void Main()
{ List pt = new List();
List wp;
for(int i=1; i<10; i++) pt.Push(i);
pt.BPrint();
Console.WriteLine("\n------------");
wp= pt.Search(5);
if (pt.Del(wp)==false) Console.WriteLine("Delete Error 5");
pt.BPrint();
Console.WriteLine("\n------------");
wp = pt.Search(1);
if (pt.Del(wp)==false) Console.WriteLine("Delete Error 1");
pt.BPrint();
Console.WriteLine("\n------------");
wp = pt.Search(9);
if (pt.Del(wp)==false) Console.WriteLine("Delete Error 9");
pt.BPrint();
Console.WriteLine("\n------------");
}
}
class List
{
public int val; //セルの値
public List ptr; //セルのリンク
public List top; //List の先頭(最後に Push されたセル)
//Constructor
public List()
{ ptr = null;
top = null;
}
//List の先頭に追加
public List Push(int v)
{ List wk;
wk = new List();
wk.val = v;
wk.ptr = top;
top = wk;
return wk;
}
//Top(登録順とは逆)から印字
public void BPrint()
{ List wk;
for(wk=top; wk!=null; wk= wk.ptr)
Console.Write("val= {0} ",wk.val);
}
//List を検索
public List Search(int v)
{ List wk;
for(wk=top; wk!=null && wk.val!=v; wk= wk.ptr);
return wk;
}
//Sell を削除
public bool Del(List pt)
{ List wk;
if (top==pt)
{ top = top.ptr;
return true;
}
wk = find_pt(top, pt);
if (wk==null) return false;
wk.ptr= wk.ptr.ptr;
return true;
}
//★ private method
//pt が定義されている(pt にリンクしている)セルを探す
List find_pt(List top, List pt)
{
if (top==null) return null;
if (top==pt)
{ Console.WriteLine("セルは top からリンクされています");
return null;
}
if (top.ptr == pt) return top;
return find_pt(top.ptr, pt);
}
}
|