递归求链表的最大值

算法描述

如果链表的头结点为空或者链表头节点的下一个节点为空,返回头节点的值
如果链表的头结点的值比链表的头节点的下一个节点的值大,删除链表头结点的下一个结点,接着对当前列表求最大值
如果列表的头结点的值没有下一个节点的值大,对下一个节点求最大值


伪代码

public static int max(Node first)
{
     
    if(first==null||first.next==null)return first.item;
    if(first.item>first.next.item)
    {
     
        first.next = first.next.next;
        max(first)
    }
    return max(first.next)
}

思考

如果链表只有一个节点,那么最大值一定是这个节点的值
如果链表多个节点,如果第一个节点比第二个节点大,那么值一定在第一个节点和第三个节点到最后一个节点中,舍弃第二个
如果第一个节点没有第二个节点大,那么最大值一定在第二个节点到最后一个节点中。
每次递归都删除掉了一个不是最大的节点,最后链表只剩下一个节点,这个节点的值一定是最大值。

你可能感兴趣的:(算法,算法)