单链表结点数据被改变 10C

我的程序用的是单链表的头插法,插入第二个结点数据以后,第一个结点里的数据变得跟第二个结点一样了,求大神给我解释一下原理及解决办法,十分感谢!!
#include
#include
#include

#define SIZE 1024

typedef struct _node
{
char *data;
struct _node * next;
}Node;

int Insert_Head(Node h, char *data)
{
if (h == NULL)
return 0;
Node *node = (Node
)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return 0;
}

node->data = data;
node->next = h->next;

h->next = node;

return 1;

}

void Display(Node *h)
{
if (h == NULL)
return;

Node *tmp = h->next;
while (tmp)
{
    printf ("%s\n", tmp->data);

    tmp = tmp->next;
}

}

int main()
{
// 创建链表
Node* head = (Node*)malloc(sizeof(Node)/sizeof(char));
if (head == NULL)
{
printf("创建链表失败\n");
return -1;
}
Node* tmp = head;
char keyword[SIZE] = {0};
char flag[10] = {0};

printf("请输入关键字1\n");
scanf("%s", keyword);
Insert_Head(head, keyword);

while(1)
{
    printf("是否还需要输入关键字?(no or yes)\n");
    scanf("%s", flag);
    if(!strcmp(flag, "yes"))
    {
        memset(keyword, 0, SIZE);
        printf("请输入关键字:\n");
        scanf("%s", keyword);
        Insert_Head(head, keyword);
        memset(flag, 0, 10);
    }
    else
    {
        memset(flag, 0, 10);
        break;
    }
}

Display(head);

return 0;

}

4个回答

你的这个数据项插入了以后要重新找到这个新的头部,不然下次插入的时候找不到一个参照物
node->next = h;
h = node;

你的那个插入操作有问题,改成下面这样应该没问题了
int Insert_Head(Node *h, char *data)
{
if (h == NULL)
return 0;
Node *node = (Node)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return 0;
}

node->data = data;
node->next = h;//把新建的节点插入到头部,即他的next指向头节点

h = node;//把头节点指向新的头节点,即新插入的节点

return 1;
}

int Insert_Head(Node *h, char *data)
{
if (h == NULL)
return 0;
Node *node = (Node)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return 0;
}

node->data = data;
node->next = h;//把新建的节点插入到头部,即他的next指向头节点

h = node;//把头节点指向新的头节点,即新插入的节点

return 1;
}

试试

typedef struct _node
{
char data;
struct _node * next;
}*Node;
在Node前面加一个

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!