在C中的链表开头插入条目

  • 本文关键字:插入 开头 链表 c
  • 更新时间 :
  • 英文 :


晚上好。在过去的一两个月里,我一直忙于使用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实际上并没有初始化。你不能使用指向任何地方的指针。除此之外,你还需要做一些类似于第一个答案的事情。

最新更新