gpt4 book ai didi

c - 我的链表在第一次迭代后没有运行

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:55 24 4
gpt4 key购买 nike

我无法理解这个问题第一次迭代后,当我取 ch 的新值时,程序结束在某些时候,我认为我的 printList() 不工作,但事实并非如此,请帮忙。

#include<stdio.h>
#include<stdlib.h>
struct node {
int data;
struct node *link;
};
typedef struct node Node;
void insertAtBeginning(Node** head, int dat) {
Node *temp = (Node *)malloc(sizeof(Node));
temp->data = dat;
if(*head != NULL){
temp->link = *head;
*head = temp;
}
temp->link = NULL;
*head = temp;
}
void printList(Node* head) {
printf("The list is : ");
while (head != NULL) {
printf("%d ", head->data);
head = head->link;
}
printf("\n");
}
void main() {
Node *head = NULL;
char ch;
int element;
printf("Do you want to insert an element? (Y/N) : ");
scanf("%c", &ch);
while (ch == 'Y' || ch == 'y')
{
printf("Enter the element : ");
scanf("%d", &element);
insertAtBeginning(&head, element);
printList(head);
printf("Do you want to insert more element? (Y/N)"); //this where i think it is not working
scanf("%c", &ch);
}
}

最佳答案

当列表不为空时,您的 insertAtBeginning() 函数首先将新元素链接到旧列表,然后执行:

temp->link = NULL;

这样到旧列表内容的链接就丢失了。这应该只在创建列表的第一个元素时完成。它应该在 else 子句中。

您还可以将 *head = temp;if block 中取出,因为这两种情况都需要完成。

void insertAtBeginning(Node** head, int dat) {
Node *temp = malloc(sizeof(Node));
temp->data = dat;
if(*head != NULL){
temp->link = *head;
} else {
temp->link = NULL;
}
*head = temp;
}

但是,现在我看了一下,if 不是必需的,因为 *head 在以下情况下将是 NULL您要分配 NULL。所以它可以是:

void insertAtBeginning(Node** head, int dat) {
Node *temp = malloc(sizeof(Node));
temp->data = dat;
temp->link = *head;
*head = temp;
}

关于c - 我的链表在第一次迭代后没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52652088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com