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?
答案 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
设置为指向新创建的LinkedListItem
。 head->Number
设置为1,head->Next
设置为NULL(请参阅构造函数)。
head->Next = new LinkedListItem(2);
在此行中创建新的LinkedListItem
,并将前一行中创建的Next
的{{1}}指针设置为指向它。
LinkedListItem
就像在前一行中一样,创建一个新元素,并将前一个元素的head->Next->Next = new LinkedListItem(3);
指针设置为指向它。