Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在链表中的特定节点之前插入节点_C - Fatal编程技术网

C 在链表中的特定节点之前插入节点

C 在链表中的特定节点之前插入节点,c,C,正如标题所说,这段代码是在指定的节点(i)之前插入一个节点(newnode)。newnode从参数中获取其值re和im。我做了一个循环,用b作为它的计数器来查找I之前的节点,这样我就可以修改I之前的节点的下一个指针。 获取i,find_最接近的函数可以工作,这不是问题所在 当我运行这个时,我得到了分割错误,我不明白为什么。任何建议都会有帮助 在最近的前插入无效(结构节点**头、浮点re、浮点im) { 结构节点\u t*i=查找最近的(*头部、re、im); //创建新节点 struct no

正如标题所说,这段代码是在指定的节点(i)之前插入一个节点(newnode)。newnode从参数中获取其值re和im。我做了一个循环,用b作为它的计数器来查找I之前的节点,这样我就可以修改I之前的节点的下一个指针。 获取i,find_最接近的函数可以工作,这不是问题所在

当我运行这个时,我得到了分割错误,我不明白为什么。任何建议都会有帮助


在最近的前插入无效(结构节点**头、浮点re、浮点im)
{
结构节点\u t*i=查找最近的(*头部、re、im);
//创建新节点
struct node_t*newnode=malloc(sizeof(struct node_t));
newnode->re=re;
newnode->im=im;
//如果最近的节点位于头部
如果(i==*头)
{
新建节点->下一步=*头部;
*头=新节点;
}
其他的
{
newnode->next=i;
//在指向某个节点之前需要该节点
结构节点_t*b=*头;
while(b->next!=i)
{
b=b->next;
}
b->next=newnode;
}
}
编辑: 这就是find_Nestest函数如何使用毕达哥拉斯函数返回argand图中最靠近指定点的节点(实值和虚值):

struct node\u t*find\u closest(struct node\u t*head、float re、float im)
{
结构节点\u t*found=head;
浮点数sml=100000;
浮动距离=0;
for(结构节点i=head;i!=NULL;i=i->next)
{
dist=sqrt(pow(i->re-re,2)+pow(i->im-im,2));
如果(距离
编辑2:制作一个小的int主函数,但只包含头和后面的一个节点


    struct node_t {
    float re,im;
    struct node_t *next;
    };typedef struct node node_t;
    
    
    int main (void) {
        struct node_t *head= malloc(sizeof(struct node_t));
        struct node_t *node1= malloc(sizeof(struct node_t));
        float re,im;
    
        head->next = node1;
        float re, im;
        scanf(" %f &f", &re, &im);
        head->re = re;
        head->im = im;
    
        scanf(" %f &f", &re, &im);
        node1->re = re;
        node1->im = im;
        printf("inserting before closest node);
        scanf(" %f &f", &re, &im);
        insert_before_closest(head,re,im);

编辑3:我发现了我的错误,输入的是head而不是&head,谢谢你的建议。

在监视变量及其值的同时,使用调试器逐个语句地检查代码语句。同时,使用笔和纸绘制列表以及对其执行的操作(使用节点框和链接箭头,根据需要擦除和重画箭头)。如果您需要我们的更多帮助,请阅读、接受SO、阅读以及。然后,您的问题包括(包括如何初始化列表、如何调用此函数以及
find_closest
函数),并指出崩溃发生在代码中的何处(使用调试器捕获)。可能是
b->next
正在到达列表的末尾,而没有找到
i
——这种情况不属于该条件。必须知道
find_closest
是如何工作的,以确认这可能不是问题所在,但您的代码从不检查
*head
是否为空。“当我运行此操作时”-这是我们无法做到的。此外,“获取i,find_最接近的函数起作用,不是问题所在。”-如果它起作用,这是一个大问题,但不能提供您实际需要的东西,这是一个逐地址的指针(即指向指针的指针,与
head
指针参数的方式基本相同)。在监视变量及其值时,使用调试器逐语句逐步执行代码语句。同时,使用笔和纸绘制列表以及对其执行的操作(使用节点框和链接箭头,根据需要擦除和重画箭头)。如果您需要我们的更多帮助,请阅读、接受SO、阅读以及。然后,您的问题包括(包括如何初始化列表、如何调用此函数以及
find_closest
函数),并指出崩溃发生在代码中的何处(使用调试器捕获)。可能是
b->next
正在到达列表的末尾,而没有找到
i
——这种情况不属于该条件。必须知道
find_closest
是如何工作的,以确认这可能不是问题所在,但您的代码从不检查
*head
是否为空。“当我运行此操作时”-这是我们无法做到的。此外,“获取i,find_最接近的函数起作用,但不是问题所在。”-如果它起作用,这是一个大问题,但不能提供您实际需要的东西,即逐地址指针(即指针指向指针,与
head
指针参数的方式大致相同)。