我还在努力理解指针、绘制节点和所有的东西,但我似乎不能理解一些东西。
例如,这里有一个函数,它应该从列表中删除具有偶数值的节点
void delete_even()
{
node **p= &head;
while (*p)
{
if ((*p)->data % 2 == 0)
{
node *nextptr=*p;
*p=(*p)->next;
delete nextptr;
}
else
{
p= &(*p)->next;
}
}
}
据我所知,p
指向名为head
的指针,head
指向第一个节点。
如果我只写p
,我说的是p
所指向的东西,在这里是指针头,如果我写*p
,我说的是p
所指向的东西,还有一个数据,在这里是第一个节点。
假设我们有一个有4个节点的链表。同样p
是一个指针的指针,所以它应该总是指向一个指针,而不是一个节点。1.现在,while (*p)
(在英语中的意思是:只要p
指向的东西和多一个数据解引用)
我把*
看作是层次,*
的意思是返回指针变量中保存的地址的值,如果它只是p
,指针看指针所指向的东西,如果它是*p
,做同样的事情,但是多一个层次,所以在这种情况下是第一个节点?
查看列表,我们看到第一个节点是1,它不是偶数,所以我们使用if语句的以下部分:p= &(*p)->next;
In英语(通过解引用和然后获取该值的下一个成员的地址,使p
指向=的东西指向第一个节点。
A)我不确定p
= ~to something~是否会使p
所指向的对象改变其值2.这会使两个指针都指向第二个节点。并且头指针移动了,我认为这是不对的... B)或者p
= ~to something~使指针p
指向其他对象2.1
在这个例子中,我们将遵循Python 2.1的方法,现在第二个节点是2,并且是偶数,创建一个新的指针nextptr
,并使它指向*p
所指向的对象,*p
当前指向next
指针,而next
指向第二个节点。
然后我们让*p
当前指向的东西是next
数据成员,它包含第一个节点的第二个节点的地址,并使=指向第二个节点的下一个节点(即第三个节点的地址)。3
我的逻辑和绘画正确吗?因为这是我试图理解的
1条答案
按热度按时间dgtucam11#
注意-head是一个全局变量。它可以作为一个参数传递,并返回head的更新值。
最初:
如果第一个节点值为偶数,则:
否则如果第一节点值不是偶数