1.3.28

1.3.28 #

解答 #

其实链表本身就是一个递归结构,链表的定义可以用递归的方式表示:

链表 = 头结点A + 链表B = 头结点A + 头结点B + 链表C……

所以 Max() 可以这么写:

Max(Node<Item> Cur, int nowmax)
    如果 Cur 为空,则直接返回 nowmax。
    否则检查 Cur 结点的值是否大于目前找到的最大值 nowmax。
    	如果不大于,继续查找下一个结点,返回 Max(Cur.next, nowmax)
		否则,把 nowmax 修改为当前结点的值,继续查找,返回 Max(Cur.next, Cur.item)

代码 #

var first = new Node<int>();
var second = new Node<int>();
var third = new Node<int>();
var fourth = new Node<int>();

first.Item = 1;
second.Item = 2;
third.Item = 3;
fourth.Item = 4;

first.Next = second;
second.Next = third;
third.Next = fourth;
fourth.Next = null;

Console.WriteLine("Max:" + Max(first));

static int Max(Node<int> first, int max = 0)
{
    if (first == null)
        return max;
    if (max < first.Item)
        return Max(first.Next, first.Item);
    return Max(first.Next, max);
}

另请参阅 #

Generics 库