哦莫12304 2025-03-07 21:07 采纳率: 50%
浏览 4
已结题

链表题,oj显示段错误,并且out_all有时不能输出,请教下这是为什么呢

为什么我的这段代码执行不起来,显示有段错误啊


#include <iostream>
using namespace std;
typedef struct LinkList {
    int val = 0;
    struct LinkList* next = nullptr;
} LinkList;

LinkList head;
void out_all();
void insert_node(int x, int y);
void delete_node(int x);
int main() {
    int n = 0;
    cin >> n;
    int i = 0;
    for (; i != n; ++i) {
        string tmp;
        cin >> tmp;
        // cout<<tmp;
        if (tmp == "insert") {
            // cout << tmp;
            int x, y;
            cin >> x, y;
            insert_node(x, y);
        } else if (tmp == "delete") {
            int x;
            cin >> x;
            delete_node(x);
        }
    }
    out_all();
    return 0;
}

void out_all() {
    LinkList* tmp = head.next;
    if (tmp == nullptr) {
        cout << "null" << endl;
        return ;
    }
    while (tmp) {
        cout << tmp->val << ' ';
        tmp = tmp->next;
    }
}
void insert_node(int x, int y) {
    if (head.next == nullptr) {
        head.next = new LinkList;
        head.next->val = y;
        return ;
    }

    // out_all();

    LinkList* tmp = head.next;
    LinkList* pre = nullptr;
    LinkList* node = new LinkList;
    node->val = y;

    out_all();

    while (tmp  && tmp->val != x) {
        pre = tmp;
        tmp = tmp->next;
    }

    // out_all();

    node->next = pre->next;
    pre->next = node->next;
    return;
}
void delete_node(int x) {
    if (head.next == nullptr) {
        return ;
    }
    LinkList* tmp = head.next;
    LinkList* pre = nullptr;
    while (tmp && tmp->val != x) {
        pre = tmp;
        tmp = tmp->next;
    }
    if (pre->next != nullptr) {
        cout << " get in " << endl;
        LinkList* post = pre->next;
        cout << post->val;
        pre->next = post->next;
    }
    return;
}

// 64 位输出请用 printf("%lld")
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-07 21:07
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    链表题,oj显示段错误,并且out_all有时不能输出,请教下这是为什么呢

    你的问题是关于链表的实现和输出问题。从你的代码中,我可以看到,你使用了C++语言实现了一个链表结构体,然而,oj显示段错误,并且out_all有时不能输出,这可能是由于以下原因:

    1. Segmentation Fault:可能是由于你的链表结构体中没有正确地初始化指针,导致程序访问无效内存,从而引发Segmentation Fault错误。
    2. out_all不能输出:可能是由于你的输出语句出现在循环体外部,或者输出语句中的变量没有被正确地初始化。

    为了解决这个问题,你可以尝试以下几点:

    1. 检查链表结构体的初始化:确保你的链表结构体中的指针都被正确地初始化。
    2. 检查输出语句:确保输出语句中的变量都被正确地初始化,并且输出语句出现在循环体内部。
    3. 使用调试工具:使用调试工具,例如gdb,来检查程序的执行过程,找到错误的原因。

    以下是一个简单的链表结构体的实现示例:

    #include <iostream>
    using namespace std;
    
    typedef struct Node {
        int data;
        Node* next;
    } Node;
    
    class LinkList {
    public:
        LinkList() : head(nullptr) {}
    
        void append(int data) {
            Node* newNode = new Node();
            newNode->data = data;
            newNode->next = head;
            head = newNode;
        }
    
        void print() {
            Node* cur = head;
            while (cur) {
                cout << cur->data << " ";
                cur = cur->next;
            }
            cout << endl;
        }
    
    private:
        Node* head;
    };
    

    这个示例中,我们定义了一个链表结构体LinkList,它有一个头结点head和一个append方法用于添加元素,一个print方法用于输出链表中的元素。

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

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 3月7日