从反向链表生成数字

问题描述 投票:0回答:1

我创建了一个函数

int reverseNum(Node *head)
来从反向链表中获取数字。 例如。对于链接列表:- 1->2->3->4,数字将为 4321。 但程序返回 4320。

#include <bits/stdc++.h>
#define vi vector<int>


using namespace std;

struct Node {
    int data;
    Node *next;


    Node(int x,Node *n){
        data=x;
        next=n;
    }

    Node(int x){
        data=x;
        next=nullptr;
    }
};



//arr to LL
Node *arrToLL(vector<int> &arr){

    //chk if the arr is empty

    if (arr.empty()){
        return nullptr;
    }

    Node *head=new Node(arr[0]);

    Node *tmp=head;

    for (int i=1;i<arr.size();i++){
        Node *newNode=new Node(arr[i]);
        tmp->next=newNode;
        tmp=newNode;

    }


    return head;
}


//get reverse number from the LL

int reverseNum(Node *head){
    int ans=0;
    int exp=0;

    while (head!=nullptr){
        ans += (head->data * pow(10, exp)); 
        cout<<ans<<"-";
        exp++;

        head=head->next;
    }

    return ans;
}


int main(){
    vi arr1={1,2,3,4};
    vi arr2={3,5,6};

    Node *head1=arrToLL(arr1);
    Node *head2=arrToLL(arr2);

    cout<<reverseNum(head1);
    
    return 0;
}
c++ linked-list
1个回答
0
投票

pow
函数返回
double
类型,因为它使用浮点算法。这可能会导致不精确,就像用户询问为什么当 n=5 时 pow(n,2) 在我的编译器和操作系统中返回 24?

您不需要为此依赖浮点计算。不要使用

exp
,而是使用具有所需能力的变量,并且该变量在每次迭代中乘以 10:

int reverseNum(Node *head){
    int ans=0;
    int power=1; // <---

    while (head!=nullptr){
        ans += head->data * power;  // <---
        cout<<ans<<"-";
        power *= 10;  // <---
        head=head->next;
    }
    return ans;
}

现在您的代码中不再有浮点处理,输出将符合预期。

© www.soinside.com 2019 - 2024. All rights reserved.