【发布时间】:2018-08-02 06:05:25
【问题描述】:
如果我有两个定义如下的结构,我如何在列表中插入一个新元素?我尝试了一些东西,但我不知道错误在哪里。插入新元素的函数称为 insertFirst。我主要有lst=insertFirst(lst,7); lst=insertFirst(lst,8);
谢谢!
typedef int DATA;
struct element {
DATA cheie;
struct element *urm;
};
typedef struct element Element, *ELEMENT;
struct lista {
int nr; //nr elemente
ELEMENT inceput;
ELEMENT sfarsit;
};
typedef struct lista Lista, *LISTA;
LISTA insertFirst(LISTA l, DATA x)
{
LISTA w;
w = (LISTA)malloc(sizeof(Lista));
if (w == NULL)return NULL;
w->inceput=(LISTA)malloc(sizeof(Lista));
w->inceput->cheie = x;
w->inceput->urm = l;
LISTA p = l;
for (; p->inceput->urm != NULL; p = p->inceput->urm);
w->sfarsit->cheie = p->inceput->cheie;
w->sfarsit->urm = NULL;
return w;
}
【问题讨论】:
-
insertFirst有一些问题。w = (LISTA)malloc(sizeof(Lista)); ... w->inceput->cheie = x; ...这看起来是个问题。你什么时候初始化w->inceput中的指针?我还认为您的insertFirst需要检查LISTA l参数是NULL(如果这是插入列表中的第一个元素)。 -
我没有...但是我是怎么做到的?
-
@ser6131790 inceput 和 sfarsit 在英文中是什么意思?
-
与分配
LISTA指针的方式相同。使用malloc。或者为他们分配一个已知数据项的地址(不在您的本地堆栈上)。顺便说一句,do not cast the return ofmalloc. -
不要在幕后进行一些未知的更改,只需声明它“工作”即可。这个问题发布不再有任何意义。您的原始发布代码具有定义列表的结构。您的
insertFirst每次都会创建一个全新的列表,而不是现有列表的新元素。有点不清楚您要在这里做什么。
标签: c list linked-list insert singly-linked-list