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

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

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

#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

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

报告相同问题?