初冀 2023-03-12 11:19 采纳率: 61.8%
浏览 30
已结题

想问一下这个链表为什么打印不出来


//2.11设计算法以删除链表中所有值为x的元素结点。
#include <iostream>
#include<stdlib.h>
using namespace std;
#define max 100
typedef int element;
typedef struct sNode {
    element data ;
    struct sNode* next;
}node,*linkList ;
void initialList(node*&L ) {
    L = new node;
    L->next = NULL;
}
bool listDelete(node* L,  element x=0) {
    node* u;
    node* p = L;//指向头结点
    while (p->next->data != x && p != NULL) {
        p = p->next;
    }
    if (p == NULL || p->next == NULL)
        return false;
    else {
        u = p->next;
        p->next = u->next;
        delete u;
        return true;
    }
 }
void listAdd(node* L) {
    element x=0;
    node* u, *R;
    L = new node;
    L->next = NULL;
    R = L;
    cout << "输入链表第一个元素(输入9999退出):";
    cin >> x;
    while (x != 9999) {
        u = new node;
        u->data = x;
        u->next = NULL;
        R->next = u;
        R = u;
        cout << "输入链表下一个元素(输入9999退出):";
        cin >> x;
    }
}
void listPrint(node* L) {
    node* p = L;
    while (p != NULL) {
        cout << p->next->data;
        p = p->next;
    }
}
int main() {
    node* L;
    element x=0;
    cout << "输入x的值为:";
    cin >> x;
    initialList(L);
    listAdd(L);
    listDelete(L, x);
    listPrint(L);
}

源代码及题如上,
输入数据都没问题,就是最后按9999退出的时候什么都没打印出来

  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-03-12 11:28
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    您的代码存在一些问题,可能是导致输出为空的原因:

    1. 在 listAdd 函数中,创建链表时需要传递链表的指针,但是在函数中直接重新定义了一个 L 变量,导致原链表指针 L 没有被修改,链表的内容也没有被修改。修改方法可以直接传入指针 L,然后在函数中通过指针修改链表的内容。

    2. 在 listPrint 函数中,循环遍历链表时,应该从链表的头结点开始,而不是从头结点的下一个节点开始,因为头结点本身并不存储数据。

    以下是修改后的代码,您可以参考一下:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    #define max 100
    typedef int element;
    typedef struct sNode {
        element data;
        struct sNode* next;
    }node, *linkList;
    
    void initialList(node*& L) {
        L = new node;
        L->next = NULL;
    }
    
    bool listDelete(node* L, element x = 0) {
        node* u;
        node* p = L; //指向头结点
        while (p->next != NULL && p->next->data != x) {
            p = p->next;
        }
        if (p->next == NULL)
            return false;
        else {
            u = p->next;
            p->next = u->next;
            delete u;
            return true;
        }
    }
    
    void listAdd(node*& L) {
        element x = 0;
        node* u, * R;
        R = L;
        cout << "输入链表第一个元素(输入9999退出):";
        cin >> x;
        while (x != 9999) {
            u = new node;
            u->data = x;
            u->next = NULL;
            R->next = u;
            R = u;
            cout << "输入链表下一个元素(输入9999退出):";
            cin >> x;
        }
    }
    
    void listPrint(node* L) {
        node* p = L->next;
        while (p != NULL) {
            cout << p->data;
            p = p->next;
        }
    }
    
    int main() {
        node* L;
        element x = 0;
        cout << "输入x的值为:";
        cin >> x;
        initialList(L);
        listAdd(L);
        listDelete(L, x);
        listPrint(L);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 qt中connect两个signal
  • ¥20 pix2pixHD运行测试命令时出现数据类型错误无法反向传播的问题
  • ¥15 python处理Excel符合条件的行自动填写数据分类
  • ¥15 汇编hook举例并讲解(通俗易懂,学习用)
  • ¥20 用c++语言模拟键盘电子琴设计
  • ¥15 STM32cubemx生成keil工程,有问题与正常的情况不同,求解!
  • ¥15 如何自动点击银行app的安全键盘,实现密码自动输入
  • ¥15 关于四边形重叠的问题
  • ¥15 用verilog语言设计一个简易的八音符电子琴,可通过按键输入来控制音响。演奏时可以选择是手演奏(由键盘输入)或自动演奏已存入的乐曲。能够自动演奏多首乐曲,且每首乐曲可重复演奏
  • ¥15 sap gui脚本每次到导出Excel的时候就停住不动。不会另存为。