【问题标题】:Compare two numbers represented as linked list比较表示为链表的两个数字
【发布时间】:2021-04-24 22:40:06
【问题描述】:

我正在尝试解决一个问题,其中一个整数正数表示为单向链表,其中最低有效位是头节点。

例如数字 1234 表示为:4 -> 3 -> 2 -> 1 -> null

我正在尝试创建一个递归算法,但恐怕我遇到了一些麻烦。如果您能看一下并指导我正确的方向,我将不胜感激:

public int compareTo(BigNumber other){
        String thisStr = toString();
        String otherStr = other.toString();
        if (thisStr.length() > otherStr.length())
            return 1;
        if (thisStr.length() < otherStr.length())
            return -1;
        if (thisStr.equals(otherStr))
            return 0;
        return compareTo(_head, other._head);
    }

    private int compareTo(IntNode ptr1, IntNode ptr2){
        int ret = 0;
        if (ptr1.getNext() != null && ptr2.getNext() != null)
            return compareTo(ptr1.getNext(), ptr2.getNext());

        if (ptr1.getValue() > ptr2.getValue())
            ret = 1;
        else if (ptr1.getValue() < ptr2.getValue())
            ret = -1;

        return ret;
    }

我在长度相等的情况下遇到了麻烦。我想创建一个递归,首先到达最后一个节点(最高有效位),然后向后检查节点。

问题是函数必须有返回值,如果两个值相等则返回0,不再迭代移动到最后一个之前的节点。

我很想听听你的想法,谢谢!

【问题讨论】:

    标签: java performance recursion linked-list


    【解决方案1】:

    在这一行中,您立即返回(仅基于最高有效数字):

    return compareTo(ptr1.getNext(), ptr2.getNext());
    

    相反,您必须仅在结果不为 0 时才返回,否则检查下一位。

    【讨论】:

    • 太棒了,伙计!太棒了!
    猜你喜欢
    • 2015-06-14
    • 2016-01-22
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多