晚上好。在过去的一两个月里,我一直忙于使用Stephen Kochan的《The C Programming Language Third Eddition
》一书自学C。我已经走到了这一步,但现在,就我的一生而言,如果不更改InsertEntry函数,我无法弄清楚如何在下面的链接列表的开头插入一个条目。有人能帮我解决这个问题吗?或者给我指明正确的方向?谢谢
//Insert a an entry at the beginning of a linked list
//Cannot change InsertEntry
struct Entry
{
int Value;
struct Entry *Next;
};
int main()
{
void InsertEntry(struct Entry *InsertPosition, struct Entry *EToInsert);
struct Entry N1, N2, N3, N4, Insert, *Start, *First;
N1.Value = 10;
N2.Value = 20;
N3.Value = 40;
N4.Value = 50;
Insert.Value = 60;
N1.Next = &N2;
N2.Next = &N3;
N3.Next = &N4;
N4.Next = (struct Entry *) 0;
Start->Next = &N1;
First = &N1;
InsertEntry(Start, &Insert);
while(First != 0)
{
printf("%in", First->Value);
First = First->Next;
}
return 0;
}
void InsertEntry(struct Entry *InsertPosition, struct Entry *EToInsert)
{
EToInsert->Next = InsertPosition->Next;
InsertPosition->Next = EToInsert;
}
您的InsertEntry
函数被设计为在元素InsertPosition
之后插入,因此您不能使用它在第一位置插入元素。
为了在第一个位置插入元素,您需要执行以下操作:
struct Entry newFirst;
newFirst.Value = 75;
newFirst.Next = oldFirst;
使用InsertEntry
,无论您做什么,列表的头都保持不变,也就是说,因为您甚至不将列表的头传给它。
你想要的是一个新的领导。只需创建一个节点,使其成为"列表"的标题,然后将其"下一个"设置为"列表",直到那时。
您可以在创建新头节点的函数PrependNode
中执行此操作,返回指向该节点的指针,以便将其分配给"列表"。
首先,您的程序根本无法运行,因为Start
实际上并没有初始化。你不能使用指向任何地方的指针。除此之外,你还需要做一些类似于第一个答案的事情。