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

时间:2015-11-13 06:33:48

标签: 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("%i\n", First->Value);
    First = First->Next;
}

return 0;
}

void InsertEntry(struct Entry *InsertPosition, struct Entry *EToInsert)
{
EToInsert->Next = InsertPosition->Next;
InsertPosition->Next = EToInsert;
}

3 个答案:

答案 0 :(得分:1)

您的InsertPosition函数旨在之后插入元素struct Entry newFirst; newFirst.Value = 75; newFirst.Next = oldFirst; ,因此您无法使用它在第一个位置插入元素。

要在第一个位置插入元素,您需要执行以下操作:

4cc698b

答案 1 :(得分:0)

使用InsertEntry,无论你做什么,列表的头部都保持不变,即因为你甚至没有将它传递给列表的头部。

你想要的是一个新的名单。只需创建一个节点,使其成为“列表”的头部,并在此之前将其设置为“列表”。

您可以在创建新头节点的函数PrependNode内执行此操作,返回指向它的指针,以便将其指定给“列表”。

答案 2 :(得分:0)

首先,您的程序根本无法运行,因为2014实际上并未初始化。你不能使用指向任何地方的指针。除此之外,您还需要做第一个答案。