在链表中发出插入节点的问题

时间:2018-04-04 02:04:39

标签: c data-structures linked-list

我正在练习创建链接列表,但在尝试将项目插入列表前面时遇到了问题。如果我把它放在main中,我的插入函数中的代码可以正常工作,但是当它作为函数单独运行时不能正常工作。

我在函数中使用指针作为参数,所以我不明白为什么我的print语句中的值没有变为100,应该使用insert函数在链接列表的前面(当我运行功能61打印,我的目标是100打印。)

感谢您的帮助!

def otherfn(codestr):
    z = 2
    locals_ = locals()
    exec(codestr, globals(), locals_)
    y = locals_["y"]
    return y

otherfn(code)

2 个答案:

答案 0 :(得分:0)

你传递一个指向节点的指针作为函数的参数,并且更改形参数的值不会改变实际参数的值,这样做应该有效。

enter code here



#include <stdio.h>  
#include <stdlib.h>

   typedef struct node *nodePtr;
   typedef struct node node;

  struct node {
  int value;
  nodePtr next;
   };


 void insert(node **first, int value)
 {
 nodePtr temp;
 temp = malloc(sizeof(node));
 temp->value = value;
 temp->next = *first;
 *first = temp;
  }

 int main()
 {

nodePtr first;
first = malloc(sizeof(node));
first->value = 61;
first->next = NULL;
insert(&first, 100);
printf("%d",first->value);
}

答案 1 :(得分:0)

您已经传递了一个指向函数 insert()的指针并将其存储在变量 first 中,其范围是函数 insert()的本地。现在你有了 在函数 insert()中更新指针 first

当你将返回 main()函数时,指针 next 的更新值丢失,这就是你在main()中打印值时得到意外结果的原因。 / p>

总结:

first = malloc(sizeof(node)); // let's say first is p1
...
insert(first, 100); // first is P1
....

node insert(node *first, int value) // first is p1
....
tmp = malloc(sizeof(node)); // let's say tmp is p2
first = temp; // Now first has become p2 but its scope is local to insert()

....
printf("%d", first->value); // first is still p1 here

<强>解决方案

node* insert(node *first, int value)
{
    nodePtr temp;
    temp = malloc(sizeof(node));
    temp->value = value;
    temp->next = first;
    first = temp;
    return first;
}

int main()
{

    nodePtr first;
    first = malloc(sizeof(node));
    first->value = 61;
    first->next = NULL;
    first = insert(first, 100);

    printf("%d", first->value);
    return 0;
}