我无法在C中将元素添加到链接列表的末尾

时间:2017-04-13 07:52:13

标签: c linked-list

我无法将元素添加到单个链接列表的末尾。我试过寻找其他问题但我无法找到解决方案。

代码是:

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

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

void PushE(struct node** head,int data);

int main(){

  struct node* a = NULL;
  PushE(&a,3);
  PushE(&a,4);
}

void PushE(struct node** headRef, int data){


  struct node* current = *headRef;
  struct node* nNode;
  nNode = (struct node*)malloc(sizeof(struct node));
  nNode->data = data;
  nNode->next= NULL;

  if(current == NULL)
     current = nNode;
  else{
    while(current->next != NULL)
       current = current->next;

  current->next = nNode;
  }

}

任何人都可以帮我实现这个。

2 个答案:

答案 0 :(得分:4)

问题出在这里:

def create_object(self, text):
    return self.get_queryset().create(**{self.create_field: text, 'user' : self.request.user})

你是如何获得最新消息的?

if(current == NULL)
    current = nNode; // <--

这里的当前是指向headRef指针的副本

您需要直接分配到struct node* current = *headRef;

答案 1 :(得分:1)

在此if语句中

if(current == NULL)
   current = nNode;

改变了局部变量电流。头部指向的指针不会改变。因此退出函数后原始列表将保持不变。

可以通过以下方式声明和定义函数

int PushE( struct node ** head, int data );

// ...

int PushE( struct node ** head, int data )
{
    struct node *nNode = malloc( sizeof( struct node ) );
    int success = nNode != NULL;

    if ( success )
    {
        nNode->data = data;
        nNode->next = NULL;

        while ( *head ) head = &( *head )->next;

        *head = nNode;
    }

    return success;
}