viency13 2023-03-10 08:01 采纳率: 68.8%
浏览 22
已结题

为什么链表输出为空呢


#include <iostream>

using namespace std;

typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode, *Linklist;

int creat ( Linklist &L )
{
    L = new Lnode;
    L->next = NULL;
    Linklist p, q = L;
    while (1)
    {
        p = new Lnode;
        cin >> p->data;
        if ( p->data == -1 )
        {
            return 0;
        }
        p->next = NULL;
        q->next = p;
        q = p;
    }
}
void cmp ( Linklist &L, int e )
{
    Linklist p, q;
    p = L;
    if ( e >= p->next->data )
    {
        q = new Lnode;
        q->data = e;
        q->next = 
        p->next = q;
        p = q;
    }
}

void Print (Linklist L)
{
    Linklist p = L->next;
    while ( p != NULL ) 
    {
        cout << p->data;
        if ( p->next != NULL)
        {
            cout << " ";
        }
        p = p->next;
    }
}

int main ()
{
    int t;
    Linklist L;
    creat (L);
    while ( 1 )
    {
        cin >> t;
        if ( t == -1 )
        {
            return 0;
        }
        else 
        {
            cmp (L, t);
        }
    }
    Print (L);
}
  • 写回答

4条回答 默认 最新

  • MarkHan_ 2023-03-10 09:08
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    在程序中,链表创建和节点插入操作是正确的。但是,在最后输出链表时,程序中有一个无限循环的 while 循环,因此程序永远不会执行到 Print 函数。

    为了解决这个问题,可以将 while 循环中的 return 0; 语句移动到 while 循环结束后,也就是 cmp 函数和 Print 函数之间,这样就可以正确输出链表了。另外,在 cmp 函数中,需要正确处理新节点的插入位置,应该在链表中找到合适的位置,然后将新节点插入到链表中。

    下面是修改后的代码:

    #include <iostream>
    
    using namespace std;
    
    typedef struct Lnode
    {
        int data;
        struct Lnode *next;
    }Lnode, *Linklist;
    
    int creat ( Linklist &L )
    {
        L = new Lnode;
        L->next = NULL;
        Linklist p, q = L;
        while (1)
        {
            p = new Lnode;
            cin >> p->data;
            if ( p->data == -1 )
            {
                return 0;
            }
            p->next = NULL;
            q->next = p;
            q = p;
        }
    }
    
    void cmp ( Linklist &L, int e )
    {
        Linklist p, q;
        p = L;
        while (p->next != NULL && e >= p->next->data)
        {
            p = p->next;
        }
        q = new Lnode;
        q->data = e;
        q->next = p->next;
        p->next = q;
    }
    
    void Print (Linklist L)
    {
        Linklist p = L->next;
        while ( p != NULL ) 
        {
            cout << p->data;
            if ( p->next != NULL)
            {
                cout << " ";
            }
            p = p->next;
        }
    }
    
    int main ()
    {
        int t;
        Linklist L;
        creat (L);
        while ( 1 )
        {
            cin >> t;
            if ( t == -1 )
            {
                break;
            }
            cmp (L, t);
        }
        Print (L);
        return 0;
    }
    
    
    

    这个程序中,cmp 函数通过遍历链表找到合适的插入位置,然后将新节点插入到链表中。Print 函数则用于输出链表的每个节点的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月28日
  • 已采纳回答 8月20日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住