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);
}