在链表初学者中创建多个节点

时间:2014-03-07 23:31:43

标签: c++ linked-list

typedef struct LinkedListItem
{
    int Number;
    LinkedListItem* Next;


    LinkedListItem(int number)
    {
        Number = number;
        Next = NULL;
    }
} LinkedListItem;

LinkedListItem *head = NULL;

head = new LinkedListItem(1);
head->Next = new LinkedListItem(2);  //confusing
head->Next->Next = new LinkedListItem(3);  //confusing

您好。我是初学者,学习链表。这是我发现的一段代码。我理解了所有内容,直到我在上面标记的行。我知道头指针首先设置为NULL,然后它可以稍后指向一个新的LinkedListItem。

head->Next = new LinkedListItem(2)

有人可以解释这里发生了什么吗?我知道箭头意味着取消引用。我的猜测是解除引用Next?

4 个答案:

答案 0 :(得分:1)

这些行通过创建新项目并在指针*Next中记录其地址来向列表中添加新元素。所以head->Next引用列表中的下一个元素。创建完成后,您可以添加head->Next->Next

LinkedListItem *head = NULL;

head = NULL

head = new LinkedListItem(1);

head {Number = 1,Next = NULL}

head->Next = new LinkedListItem(2);

head {Number = 1,Next = {Number = 2,Next = NULL}}

head->Next->Next = new LinkedListItem(3);

head {Number = 1,Next = {Number = 2,Next = {Number = 3,Next = NULL}}

答案 1 :(得分:0)

当您说解除引用时,通常在您的示例中表示*head。但是,如果您编写head->Next,则相当于(*head).Next,因此从这个意义上说它是解除引用。

至于你的问题,是的,它是解除引用头并在链表的末尾添加新节点。但请注意,这不是向链表添加元素的最佳方法。尽管它取决于您使用链接列表的应用程序类型,但大多数情况下,您通常会将元素直接添加到头部。或者保留一个尾指针并添加到尾部。

答案 2 :(得分:0)

head->Next = new LinkedListItem(2)

语句相当于

(*head).Next = new LinkedListItem(2)

所以你取消引用头并分配给它的Next元素(这是一个指针)a 指向新LinkedListItem的指针。

答案 3 :(得分:0)

链接列表是通过指针相互连接的元素序列。 在您的示例中,Next指针指向列表中的下一个元素。 解除引用指针意味着引用指针指向的对象。 箭头表示访问指针指向的对象的字段。

LinkedListItem *head = NULL;

在此行head指针设置为NULL,正如您所理解的那样。

head = new LinkedListItem(1);

在此行head设置为指向新创建的LinkedListItemhead->Number设置为1,head->Next设置为NULL(请参阅构造函数)。

head->Next = new LinkedListItem(2);  

在此行中创建新的LinkedListItem,并将前一行中创建的Next的{​​{1}}指针设置为指向它。

LinkedListItem

就像在前一行中一样,创建一个新元素,并将前一个元素的head->Next->Next = new LinkedListItem(3); 指针设置为指向它。