在C中创建一个链表,但是我创建的函数的结束条件是什么,因为它没有退出

时间:2016-09-26 06:21:27

标签: c linked-list

我是数据结构的新手,只是没有得到链表的工作,所以我自己创建了一个链表,它与书中的不同,但是不能理解我的代码中的问题在哪里不是退出。需要纠正的是什么 这是我的代码

struct node{
    int data;
    struct node* next;
};
void addAtBegining(int data,struct node* head){
    struct node* new_node = (struct node*)malloc(sizeof(struct node));
    new_node->data = data;
    new_node->next = head->next;
    head->next = new_node;
}
void display(struct node* head){
    while(head->next!=NULL){
        head = head->next;
        printf("%d ",head->data);
    }
}
void main(){
    struct node* list = NULL;
    addAtBegining(2,list);
    addAtBegining(3,list);
    addAtBegining(4,list);
    addAtBegining(5,list);
    addAtBegining(6,list);
    display(list);
}

3 个答案:

答案 0 :(得分:2)

未定义的行为:您有struct node* list = NULL,但随后将list传递给addAtBegininghead会在参数head->next中收到,然后执行head

无论

  • 初始化头
  • 添加代码以addAtBegining返回头指针,如果为null则分配
  • 添加双指针以更新struct node* list = (struct node *) malloc (sizeof (struct node)); list->data = 0xdeafbabe; list->next = NULL;

例如,您可以执行以下操作

npm install axios promise.prototype.finally --save

然后使用现有代码。

这样做只是为了一个带有垃圾数据的虚拟头节点。因为您的打印例程无论如何都会跳过头节点。这样可以正常工作。

答案 1 :(得分:1)

您忘了初始化struct node* list = NULL;。可以使用以下代码修复此更改struct node* head = (struct node*)malloc(sizeof(struct node)); head->data = 0; head->next = NULL; struct node* list = head;

$("my Ele")
    .hammer()
    .on('tap', function(e){
        // do something
    })

答案 2 :(得分:1)

你没有在代码中设置头指针。所以这个指针在其他功能中无法识别。

struct node{
   int data;
   struct node* next;
}*head;

// you dont need to put the head pointer in the parameters if you just add in the beginning of the single linked list.
void addAtBegining(int data){
     struct node* new_node = (struct node*)malloc(sizeof(struct node));
     // if head is empty then set the head first.
     if(head==NULL){
        head = new_node;
        head->data = data;
        head->next = NULL;
        return;
     }
     // if head is not empty then set the new_node->data and set that node as the new head
     new_node->data = data;
     new_node->next = head;
     head = new_node;
}

void display(struct node* head){
    while(head!=NULL){
      printf("%d ",head->data);
      head = head->next;
    }
}