晚上好。在过去的一两个月里,我一直忙着使用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("%i\n", First->Value);
First = First->Next;
}
return 0;
}
void InsertEntry(struct Entry *InsertPosition, struct Entry *EToInsert)
{
EToInsert->Next = InsertPosition->Next;
InsertPosition->Next = EToInsert;
}
答案 0 :(得分:1)
您的InsertPosition
函数旨在在之后插入元素struct Entry newFirst;
newFirst.Value = 75;
newFirst.Next = oldFirst;
,因此您无法使用它在第一个位置插入元素。
要在第一个位置插入元素,您需要执行以下操作:
4cc698b
答案 1 :(得分:0)
使用InsertEntry
,无论你做什么,列表的头部都保持不变,即因为你甚至没有将它传递给列表的头部。
你想要的是一个新的名单。只需创建一个节点,使其成为“列表”的头部,并在此之前将其设置为“列表”。
您可以在创建新头节点的函数PrependNode
内执行此操作,返回指向它的指针,以便将其指定给“列表”。
答案 2 :(得分:0)
首先,您的程序根本无法运行,因为2014
实际上并未初始化。你不能使用指向任何地方的指针。除此之外,您还需要做第一个答案。