从结构,指向NULL的指针并返回

时间:2020-05-01 13:15:28

标签: c pointers linked-list null

typedef struct Element 
{
    int number;
    struct Element *right;
    struct Element *left;
} Element;

Element *newElement;
Element *head;
Element *pos;     
Element *current; 

void insert_Element()
{
    newElement = malloc(sizeof(Element));

    if (head==NULL)    
    {
      head = newElement;
      current = newElement;
      current->right = pos;
      //pos->left = current;
    }
}

双向链接列表的头应该有一个指向下一个(right)元素的指针(该元素是NULL,也可以是pos)。这可以正常工作,但是从left / pos返回的指针(NULL)不起作用。 我做什么工作?可能吗 预先谢谢你:)

2 个答案:

答案 0 :(得分:2)

除非insert_Elementhead并且NULL不是pos,否则NULL函数的当前版本不起作用,并且不会设置{新元素的{1}}成员。 left变量的目的尚未阐明,但似乎是用来指向要在其之前插入新元素的元素。我们可以使用pos来表示将新元素放置在列表的末尾。这是执行此操作的版本:

pos == NULL

最好不要使用太多全局变量,而应使用函数参数。以下是不使用全局变量并返回指向列表中新元素的指针的版本(如果分配失败,则返回void insert_Element(void) { newElement = malloc(sizeof(Element)); if (newElement == NULL) { return; } newElement->right = pos; if (pos != NULL) { /* insert before pos */ newElement->left = pos->left; pos->left = newElement; } else if (head != NULL) { /* add to end of list */ current = head; while (current->right != NULL) { current = current->right; } newElement->left = current; current->right = newElement; } else { /* add to empty list */ newElement->left = NULL; } if (pos == head) { /* make it the start of the list */ head = newElement; } /* make it the 'current' element */ current = newElement; } ):

NULL

答案 1 :(得分:-1)

可能您只需要分配Element *pos。实际上pos等于NULL,并且从逻辑上讲没有左右指针,这就像在不存在的房屋中寻找厕所一样。