不知名的网友.ᥫᩣ༠ 2023-11-23 20:30 采纳率: 95.7%
浏览 4
已结题

创建一个动态链表输出出现问题

创建了一个动态链表,我想再弄一个函数来遍历输出它,但是为什么只会打印出最后输入的一个值?

img


具体代码我发了出来,麻烦帮忙看一下

img

  • 写回答

2条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-23 22:35
    关注

    【以下回答由 GPT 生成】

    你好, 根据你提供的问题描述和代码,我看到你创建了一个链表并用一个函数读取用户输入存储到链表中,然后你又写了一个函数来遍历链表并输出它。但是问题是你只能打印出最后输入的一个值。

    这个问题的原因是你的链表遍历函数没有正确实现。下面是一个可能的解决方案来修复它:

    首先,我们需要定义链表节点的结构体,包括数据和指向下一个节点的指针。可以这样定义:

    typedef struct Node {
        int data;
        struct Node* next;
    } Node;
    

    然后,我们需要定义一个指向链表头部的指针,以及用于添加节点的函数。可以这样定义:

    Node* head = NULL;
    
    void addNode(int data) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = data;
        newNode->next = NULL;
    
        if (head == NULL) {
            head = newNode;
        } else {
           Node* temp = head;
           while (temp->next != NULL) {
               temp = temp->next;
           }
           temp->next = newNode;
        }
    }
    

    在这个函数中,我们首先创建一个新的节点并为它分配内存。然后,我们检查链表是否为空,如果是的话,我们将头节点指向新节点。否则,我们遍历到链表的最后一个节点,并将最后一个节点的next指针指向新节点。

    接下来,我们需要修改你的遍历函数,以便正确地遍历整个链表并输出它的值。可以这样修改:

    void printList() {
        Node* temp = head;
        while (temp != NULL) {
            printf("%d ", temp->data);
            temp = temp->next;
        }
        printf("\n");
    }
    

    在这个函数中,我们使用一个临时指针来迭代整个链表。我们依次访问每个节点,并打印它的数据。

    最后,你可以在主函数中调用addNode函数读取用户输入并将其添加到链表中,然后调用printList函数来遍历并输出链表。以下是一个完整的示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {
        int data;
        struct Node* next;
    } Node;
    
    Node* head = NULL;
    
    void addNode(int data) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = data;
        newNode->next = NULL;
    
        if (head == NULL) {
            head = newNode;
        } else {
           Node* temp = head;
           while (temp->next != NULL) {
               temp = temp->next;
           }
           temp->next = newNode;
        }
    }
    
    void printList() {
        Node* temp = head;
        while (temp != NULL) {
            printf("%d ", temp->data);
            temp = temp->next;
        }
        printf("\n");
    }
    
    int main() {
        int value;
    
        printf("请输入链表的数据(输入0时结束):\n");
    
        do {
            scanf("%d", &value);
            if (value != 0) {
                addNode(value);
            }
        } while (value != 0);
    
        printf("链表的数据为:");
        printList();
    
        return 0;
    }
    

    通过这个改进后的代码,你应该能够正确地遍历并输出整个链表的值。

    希望能对你有所帮助,如果你有任何问题,请随时提出。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月24日
  • 已采纳回答 11月24日
  • 创建了问题 11月23日