Clare_CPU 2020-03-25 15:51 采纳率: 100%
浏览 244
已采纳

为什么尾插法循环链表在插入时会出错?

调试时发现插入函数在调用时没有响应,百思不得其解。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
//结构体定义
typedef struct node
{
    int x;
    int y;
    struct node *next;
}Node,*Snack;
//所用函数
void initsnack(Snack s);
void insert_node(Snack s,int x,int y);//问题所在函数
void show(Snack s);

int main()
{
    Snack s;
    initsnack(s);
    insert_node(s,12,17);
    insert_node(s,15,16);
    show(s);
}
void initsnack(Snack s)
{
    //初始化蛇身并赋值  带尾指针循环链表
    s=(Node*)malloc(sizeof(Node));
    s->next=s;
     printf("OK1\n");
}
void insert_node(Snack s,int x,int y)
{
        //插入节点
    Snack p=(Node *)malloc(sizeof(Node));
    if(!p) printf("overflow");
    p->x=x;
    p->y=y;
    s->next=p;//调试时显示程序到这儿就不往下进行了,为什么啊?
    p->next=s;
    s=p;
    free(p);
    printf("OK2\n");

}
void show(Snack s)
{
//显示函数
    Snack p=(Snack)malloc(sizeof(Node));
    p=s->next;
    while(p->next!=s->next)
    {
        p=p->next;
        printf("x=%d,y=%d\n",p->x,p->y);
    }
}

  • 写回答

1条回答 默认 最新

  • 旧时光~ 2020-03-25 16:37
    关注

    你往 insert__node 传递的是结构体的值(传值调用,传址调用), 在函数体内操作不会影响到main里面的 链表s

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler