gpt4 book ai didi

c - 在链接列表的开头插入字符串时出错

转载 作者:行者123 更新时间:2023-11-30 16:56:22 27 4
gpt4 key购买 nike

我一直在尝试编写一个程序,将一个字符串插入到链表的开头,但是其中出现了一个小问题。我的代码如下。

#include <stdio.h>
#include <stdlib.h>

struct node{
char* data;
struct node* next;
};



void insIni(struct node** hp, char* x){
struct node* tmp = (struct node *)malloc(sizeof(struct node));
tmp->data = x;
tmp->next = *hp;
*hp = tmp;
}

void printList(struct node* h){
struct node* tmp = h;
printf("\nList contents: \n");
while (tmp != NULL){
printf("%s, ", tmp->data );
tmp = tmp->next;
}
printf("\n");
}

int main(int argc, char const *argv[]){

struct node* head = NULL;

char word [256];
scanf("%s", word);
insIni(&head, word);
scanf("%s", word);
insIni(&head, word);
scanf("%s", word);
insIni(&head, word);

printList(head);

return 0;
}

在链表的开头插入一个新字符串后,前面的元素也更改为与刚刚插入的字符串相同,我如何更改我的代码,以便链接的前面的元素list 保持不变,只添加开头的元素?

例如,如果我写 A B C,链接列表最终会打印为 C, C, C,而不是 C, B, A,。

最佳答案

传递给 insIni 的值始终相同,因此所有节点都将指向相同的值。您需要做的是数据的副本。

例如

void insIni(struct node** hp, char* x){
struct node* tmp = (struct node *)malloc(sizeof(struct node));
tmp->data = strdup(x);
tmp->next = *hp;
*hp = tmp;
}

char *p = malloc(strlen(x)+1);
strcpy(p, x);
tmp->data = p;

关于c - 在链接列表的开头插入字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935083/

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