镜花寒 2018-05-03 11:00 采纳率: 0%
浏览 975
已结题

单链表结点数据被改变

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

  • 叫码农就行 2018-05-03 11:16
    关注

    你的那个插入操作有问题,改成下面这样应该没问题了
    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;
    }

    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R