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
)不起作用。
我做什么工作?可能吗
预先谢谢你:)
答案 0 :(得分:2)
除非insert_Element
为head
并且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,并且从逻辑上讲没有左右指针,这就像在不存在的房屋中寻找厕所一样。