C 理解添加到链接列表的前面
假设我有这样一个列表:C 理解添加到链接列表的前面,c,data-structures,linked-list,nodes,C,Data Structures,Linked List,Nodes,假设我有这样一个列表: [1]-> [2]-> [3]-> [4]-> [5]->NULL 其中1的值为头部,5的值为尾部。 下面是示例代码: 我不明白的是这一行(在addtoFront函数中) 这是我得到的。 ptr->value=input 此行使用给定值初始化名为指针的节点 `ptr->next = head;` 这一行将新项目的下一个指针(插入前面)设置为前一个标题,因此我们有如下内容: 在前面插入[9],以便: [9] (new head po
[1]-> [2]-> [3]-> [4]-> [5]->NULL
其中1的值为头部,5的值为尾部。
下面是示例代码:
我不明白的是这一行(在addtoFront函数中)
这是我得到的。
ptr->value=input
此行使用给定值初始化名为指针的节点
`ptr->next = head;`
这一行将新项目的下一个指针(插入前面)设置为前一个标题,因此我们有如下内容:
在前面插入[9],以便:
[9] (new head points to old head)
[9] -> [1] (9's next pointer points to 1)
我不明白的是这句话:
head = ptr;
读这篇文章让我感到困惑,因为我将其解释为将两个节点设置为彼此相等,即[1]变为[9],因此我们有两个节点是[9],[9]->[9]->[2]->[3]->[4]->[5]->NULL
但事实显然并非如此
一旦他们没有箭头符号
->
,我似乎就完全迷失在正在发生的事情中(对于当前的大多数函数)。任何帮助都将不胜感激 这里的问题是,您考虑的指针是具体实例,而不是指向内存位置的实际指针
在您引用的问题中,head是指向包含节点实例的内存位置的指针
代码:水头=ptr 正在更新磁头指向的内存位置,而磁头的原始位置现在包含在ptr->next中 要获取head的实际节点值,需要取消对指针的引用:
*head
例如,给定一个指向内存位置8的链表头,其中包含一个值为“a”的节点实例和一个新的输入“b”:
在执行您指向的代码之前:
这里的问题是,您将指针视为具体实例,而不是内存位置的实际指针 在您引用的问题中,head是指向包含节点实例的内存位置的指针 代码:
水头=ptr 正在更新磁头指向的内存位置,而磁头的原始位置现在包含在ptr->next中 要获取head的实际节点值,需要取消对指针的引用:
*head
例如,给定一个指向内存位置8的链表头,其中包含一个值为“a”的节点实例和一个新的输入“b”:
在执行您指向的代码之前:
假设您有这样一个链表:
H T
[3]->[2]->[1]->NULL
我们想在前面(头部侧)插入一个元素为4
的节点。首先,我们需要在一旁创建一个新节点,由ptr
指向:
ptr H T
[4] [3]->[2]->[1]->NULL
然后我们需要将其链接到列表的标题:
ptr->next = head
ptr H T
[4]---->[3]->[2]->[1]->NULL
最后但并非最不重要的一点是,我们需要更新head指针以指向列表的新开头,因为现在它将指向列表中的第二个元素,而不是第一个元素ptr
现在指向列表中新的第一个元素
head = ptr;
ptr
H T
[4]->[3]->[2]->[1]->NULL
然后,插入就完成了。假设您有这样一个链表:
H T
[3]->[2]->[1]->NULL
我们想在前面(头部侧)插入一个元素为4
的节点。首先,我们需要在一旁创建一个新节点,由ptr
指向:
ptr H T
[4] [3]->[2]->[1]->NULL
然后我们需要将其链接到列表的标题:
ptr->next = head
ptr H T
[4]---->[3]->[2]->[1]->NULL
最后但并非最不重要的一点是,我们需要更新head指针以指向列表的新开头,因为现在它将指向列表中的第二个元素,而不是第一个元素ptr
现在指向列表中新的第一个元素
head = ptr;
ptr
H T
[4]->[3]->[2]->[1]->NULL
现在,插入已完成。以下是详细信息:
您的指针如下所示:
头部->下一个->下一个->下一个->尾部
ptr->value = input;
现在看起来是这样的:
头部->下一步->下一步->尾部->空
head = ptr;
及
ptr->null
在这一点上,你基本上有两个列表
ptr->next = head; // Point next value to the previous head
现在,您将附加两个列表:
ptr->head->next->next->next->tail->null
head = ptr;
现在你要确保你所说的head
指向新的块而不是旧的块
头部(以前的ptr)->next(以前的头部)->next->next->next->tail->null
head = ptr;
现在,您已将该新值插入列表的前面。以下是详细信息:
您的指针如下所示:
头部->下一个->下一个->下一个->尾部
ptr->value = input;
现在看起来是这样的:
头部->下一步->下一步->尾部->空
head = ptr;
及
ptr->null
在这一点上,你基本上有两个列表
ptr->next = head; // Point next value to the previous head
现在,您将附加两个列表:
ptr->head->next->next->next->tail->null
head = ptr;
现在你要确保你所说的head
指向新的块而不是旧的块
头部(以前的ptr)->next(以前的头部)->next->next->next->tail->null
head = ptr;
现在,您已经将该新值插入到列表的前面。
头始终指向第一个节点,因此当您