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 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿