为啥我的打印功能不起作用?链表

     2023-02-22     136

关键词:

【中文标题】为啥我的打印功能不起作用?链表【英文标题】:Why is my print function not working? Linked list为什么我的打印功能不起作用?链表 【发布时间】:2020-01-08 17:55:41 【问题描述】:

我正在做一个班级作业,我必须创建一个代表一个大数字的链表,但我无法让打印功能工作。

这是代码:

标题

class List

private:
    struct node
    
        int data;
        node* next;
    ;
    node* head;
    node* temp;
    node* curr;
public: 
    List();
    void addNode(std::string digits);
    void printList();
;

构造函数

List::List()

    head = NULL;
    curr = NULL;
    temp = NULL;

创建列表的函数

void List::addNode(string digits)

    int o = 1;
    int j = 0;
    int i = 0;
    node *n;
    node *head;
    node *temp;
    //=================================================================================//
    n = new node;
    if (digits[0]=='-')
    
        n -> data = -1;
        head = n;
        temp = n;
    
    else
    
        n -> data = 1;
        head = n;
        temp = n;
    
    //================================================================================//
    if ((head->data) == -1)
    
        while (o < digits.length())
        
            n = new node;
            n->data = stoi(digits.substr(o,1));
            temp -> next = n;
            temp = temp -> next;
            o++;
        
    
    else
    
        while(i < digits.length())
        
            n = new node;
            n->data = stoi(digits.substr(i,1));
            temp -> next = n;
            temp = temp -> next;
            i++;
        
    

我一直在尝试实现的打印功能,它没有输出(空白):

void List::printList()

    node* curr = head;
    while(curr != NULL)
    
        cout<<curr -> data<<" ";
        curr = curr -> next;
    

当我在 addNode 函数中使用此代码时,列表打印正常:

if ((head -> data) == -1)

    while(j < digits.length())
    
        cout<<head -> data<<" ";
        head = head -> next;
        j++;
    

else

    while(j<=digits.length())
    
        cout<<head -> data<<" ";
        head = head -> next;
        j++;
    

【问题讨论】:

为什么List::addNode(string digits) 中有node *head; 你没有使用成员变量head 你声明了一个新的局部变量head,它会隐藏同名的成员变量,然后功能完成后离开。所以 head 成员变量仍然是 NULL 并且您的 print 没有要打印的内容。 当我在 addNode 函数中使用此代码时,列表打印正常它根本不应该打印。 我的第二条评论的意思是,如果你在addNode() 函数中留下了node *head; 错误,你不应该打印,因为你没有修改head 成员。 【参考方案1】:

对于初学者来说,这些数据成员

node* temp;
node* curr;

是多余的。如果需要,您可以在类的成员函数中使用类似的局部变量来代替它们。

函数addNode处理局部变量head而不是同名数据成员。

void List::addNode(string digits)

    int o = 1;
    int j = 0;
    int i = 0;
    node *n;
    node *head;
    //…

另外你忘了把最后一个节点的数据成员 next 设置为nullptr

如果成员函数将被第二次调用,那么就会出现内存泄漏。

为一个字符调用标准函数std::stoi

n->data = stoi(digits.substr(i,1));

效率低下。

该类可以如下所示,如下面的演示程序所示。您将需要自己添加其他必需的成员函数(例如复制构造函数或析构函数)。

#include <iostream>
#include <string>

class List

private:
    struct node
    
        int data;
        node *next;
     *head = nullptr;
public: 
    List() = default;
    void addNode( const std::string &digits );
    std::ostream & printList( std::ostream &os = std::cout ) const;
;


void List::addNode( const std::string &digits )

    if ( !digits.empty() && 
         !( digits.size() == 1 && ( digits[0] == '-' || digits[0] == '+') ) )
    

        node **current = &head;

        while ( *current )
        
            node *tmp = *current;
            *current = ( *current )->next;
            delete tmp;
        

        std::string::size_type i = 0;

        *current = new node  digits[i] == '-' ? -1 : 1, nullptr ;

        if ( digits[i] == '-' || digits[i] == '+' ) ++i;

        for ( ; i < digits.size(); i++ )
        
            current = &( *current )->next;

            *current = new node  digits[i] - '0', nullptr ;
        
    


std::ostream & List::printList( std::ostream &os ) const

    if ( head != nullptr )
    
        if ( head->data == -1 ) os << '-'; 

        for ( node *current = head->next; current != nullptr; current = current->next )
        
            os << current->data;
        
    

    return os;


int main() 

    List lst;

    lst.addNode( "-123456789" );
    lst.printList() << '\n';

    lst.addNode( "987654321" );
    lst.printList() << '\n';

    return 0;

程序输出是

-123456789
987654321

【讨论】:

未来读者:特别注意node **current = &amp;head; 技巧消除了多少代码。

为啥我的媒体功能“最大宽度”不起作用?

】为啥我的媒体功能“最大宽度”不起作用?【英文标题】:Whyismymediafeature\'max-width\'notworking?为什么我的媒体功能“最大宽度”不起作用?【发布时间】:2022-01-1411:23:42【问题描述】:这是我网站的标题图片:headerbackground-image:... 查看详情

为啥我的过滤功能不起作用? (Javascript)。

】为啥我的过滤功能不起作用?(Javascript)。【英文标题】:Whydoesn\'tmyfilterfunctionwork?(Javascript).为什么我的过滤功能不起作用?(Javascript)。【发布时间】:2015-12-1602:47:19【问题描述】:我想要完成的是,能够使用过滤器功能... 查看详情

为啥我的账单计算功能不起作用?

】为啥我的账单计算功能不起作用?【英文标题】:Whyismybillcalculationfunctionwon\'twork?为什么我的账单计算功能不起作用?【发布时间】:2022-01-0320:28:38【问题描述】:我正在为酒店管理系统编写程序,但在为客户计算账单时发现... 查看详情

为啥我的前向声明不起作用? (简单功能)

】为啥我的前向声明不起作用?(简单功能)【英文标题】:Whyismyforwarddeclarationnotworking??(simplefunction)为什么我的前向声明不起作用?(简单功能)【发布时间】:2020-12-1715:47:53【问题描述】:#include<iostream>#include"main.h"intmai... 查看详情

为啥我的 RemoveItem 功能不起作用? - 上下文 API - 反应

】为啥我的RemoveItem功能不起作用?-上下文API-反应【英文标题】:WhyismyRemoveItemfunctionnotworking?-ContextAPI-React为什么我的RemoveItem功能不起作用?-上下文API-反应【发布时间】:2021-11-0608:57:31【问题描述】:我正在构建一个购物篮电... 查看详情

为啥发件人行在我的邮件功能上不起作用?

】为啥发件人行在我的邮件功能上不起作用?【英文标题】:WhyistheFromlinenotworkingonmymailfunction?为什么发件人行在我的邮件功能上不起作用?【发布时间】:2010-12-2121:24:51【问题描述】:我正在使用邮件功能将html发送到电子邮件... 查看详情

为啥我的控制器中的保存功能不起作用?

】为啥我的控制器中的保存功能不起作用?【英文标题】:Whythefunctionsaveinmycontrollerdoesnotwork?为什么我的控制器中的保存功能不起作用?【发布时间】:2019-07-2316:58:10【问题描述】:我正在使用springboot和thymeleaf做一个简单的crud... 查看详情

为啥在使用箭头键时,更改功能对我的范围滑块不起作用?

】为啥在使用箭头键时,更改功能对我的范围滑块不起作用?【英文标题】:Whyistheonchangefunctionnotworkingformyrangesliderwhenusingarrowkeys?为什么在使用箭头键时,更改功能对我的范围滑块不起作用?【发布时间】:2015-04-2006:28:21【问题... 查看详情

为啥我的函数在调用时不起作用? [关闭]

】为啥我的函数在调用时不起作用?[关闭]【英文标题】:Whyiisn\'tmyfunctionworkingwhenit\'scalled?[closed]为什么我的函数在调用时不起作用?[关闭]【发布时间】:2015-01-1907:08:26【问题描述】:所以我正在制作一个程序来模拟按键“a”... 查看详情

为啥我只打开一个窗口的功能不起作用?

】为啥我只打开一个窗口的功能不起作用?【英文标题】:WhydoesmyfunctiontoonlyopenoneWindownotwork?为什么我只打开一个窗口的功能不起作用?【发布时间】:2022-01-0707:59:43【问题描述】:所以我希望在我的项目中只打开我的Window的1个... 查看详情

为啥我的 to_string() 不起作用? [复制]

】为啥我的to_string()不起作用?[复制]【英文标题】:Whydoesn\'tmyto_string()work?[duplicate]为什么我的to_string()不起作用?[复制]【发布时间】:2014-12-0803:37:28【问题描述】:我正在做一个BigInt实现,对于我的一个构造函数,我需要接受... 查看详情

为啥我的 UICollectionView 大纲不起作用?

】为啥我的UICollectionView大纲不起作用?【英文标题】:Whydoesn\'tmyUICollectionViewoutlinework?为什么我的UICollectionView大纲不起作用?【发布时间】:2020-07-2721:10:52【问题描述】:iOS14中的新功能,您可以使用UICollectionViewCompositionalLayout.... 查看详情

为啥我的选择排序代码不起作用?

】为啥我的选择排序代码不起作用?【英文标题】:Whyisn\'tmyselectionsortcodeworking?为什么我的选择排序代码不起作用?【发布时间】:2013-05-1617:58:47【问题描述】:我正在学习汇编。我需要使用选择排序来对整数列表进行排序。我... 查看详情

为啥我的点击功能在移动设备上的这个 SVG 内不起作用,但在桌面上却起作用?

】为啥我的点击功能在移动设备上的这个SVG内不起作用,但在桌面上却起作用?【英文标题】:WhydoesmyclickfunctionnotworkinsideofthisSVGonmobiledevicesbutitdoesondesktop?为什么我的点击功能在移动设备上的这个SVG内不起作用,但在桌面上却起... 查看详情

为啥我的 HTML5 mp4 视频的 Flash 后备功能不起作用?

】为啥我的HTML5mp4视频的Flash后备功能不起作用?【英文标题】:Whydoesn’tmyFlashfallbackforHTML5mp4videowork?为什么我的HTML5mp4视频的Flash后备功能不起作用?【发布时间】:2014-04-0113:48:22【问题描述】:我有本地html页面(html5)。Html-这是... 查看详情

为啥我的全局变量不起作用? (Python)

】为啥我的全局变量不起作用?(Python)【英文标题】:Whyismyglobalvariablenotworking?(Python)为什么我的全局变量不起作用?(Python)【发布时间】:2021-01-2209:09:24【问题描述】:我正在为学校制作一个基于文本的游戏,我希望它具... 查看详情

为啥我的本地脚本不起作用?

】为啥我的本地脚本不起作用?【英文标题】:Whyisn\'tmylocalscriptworking?为什么我的本地脚本不起作用?【发布时间】:2016-11-0307:12:51【问题描述】:我基本上是在尝试编写一个GUI控制面板脚本,允许用户使用动力控制杆(在GUI中... 查看详情

为啥我的 tasks.loop 在 Heroku 上不起作用?

】为啥我的tasks.loop在Heroku上不起作用?【英文标题】:Whyismytasks.loopnotworkingonHeroku?为什么我的tasks.loop在Heroku上不起作用?【发布时间】:2021-05-3116:40:46【问题描述】:我有一个名为wednesday的齿轮,它从images文件夹中打印特定图... 查看详情