1.3.28

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

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

链表 = 头结点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)

代码

using System;
using Generics;

namespace _1._3._28
{
    /*
     * 1.3.28
     * 
     * 用递归方法解答上一道练习。
     * 
     */
    class Program
    {
        static void Main(string[] args)
        {
            Node<int> first = new Node<int>();
            Node<int> second = new Node<int>();
            Node<int> third = new Node<int>();
            Node<int> 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);
            else
                return Max(first.next, max);
        }
    }
}

另请参阅

Generics 库

上一题 下一题