没有头指针的删除
delete without a head pointer
问题:
在链表中间某处给定了某个节点,您需要删除该节点。
您没有获得链表的头节点。
条件:给定的节点旁边至少有一个节点。
节点结构:
struct Node {
int data;
struct Node *next;
Node(int x) {
data = x;
next = NULL;
}
}*head;
我的解决方案:
Node* temp=node->next;
node->data=node->next->data;
node->next=node->next->next;
delete temp;
另一个解决方案(我没看懂):
Node *temp = node->next;
*node = *(node->next);
delete temp;
两者都给出了正确的结果,但我不理解后一个解决方案的第二行。
第二种解决方案与第一种相同,只是它使用了class的赋值运算符,而不是单独分配成员。
so you mean in the 2nd solution too the data member gets copied(like in the 1st one)?
是的,这就是 class 的复制赋值运算符所做的。
see don't understand this line.. *node = *(node->next); so can you elaborate/explain this line.
*node
通过指针 node
间接指向类型 Node
的对象。结果是 Node
.
的左值
*(node->next)
首先通过指针 node
间接访问它的成员 next
,它是指向另一个类型 Node
的对象的指针。这个 other 指针也是间接通过的,这导致左值指向另一个 Node
.
最后,赋值运算符将第一个Node
赋值给另一个Node
。 class 的复制赋值运算符将每个成员从右手操作数复制到左手操作数的相应成员。
结构 Node
有一个默认的复制赋值,因为它和移动赋值都没有声明。
因此 *node = *(node->next);
将两个属性(data
和 next
)从 *(node->next)
复制到 *node
使其完全相同:
(*node).data = (*(node->next)).data
(*node).next = (*(node->next)).next
问题: 在链表中间某处给定了某个节点,您需要删除该节点。 您没有获得链表的头节点。 条件:给定的节点旁边至少有一个节点。
节点结构:
struct Node {
int data;
struct Node *next;
Node(int x) {
data = x;
next = NULL;
}
}*head;
我的解决方案:
Node* temp=node->next;
node->data=node->next->data;
node->next=node->next->next;
delete temp;
另一个解决方案(我没看懂):
Node *temp = node->next;
*node = *(node->next);
delete temp;
两者都给出了正确的结果,但我不理解后一个解决方案的第二行。
第二种解决方案与第一种相同,只是它使用了class的赋值运算符,而不是单独分配成员。
so you mean in the 2nd solution too the data member gets copied(like in the 1st one)?
是的,这就是 class 的复制赋值运算符所做的。
see don't understand this line.. *node = *(node->next); so can you elaborate/explain this line.
*node
通过指针 node
间接指向类型 Node
的对象。结果是 Node
.
*(node->next)
首先通过指针 node
间接访问它的成员 next
,它是指向另一个类型 Node
的对象的指针。这个 other 指针也是间接通过的,这导致左值指向另一个 Node
.
最后,赋值运算符将第一个Node
赋值给另一个Node
。 class 的复制赋值运算符将每个成员从右手操作数复制到左手操作数的相应成员。
结构 Node
有一个默认的复制赋值,因为它和移动赋值都没有声明。
因此 *node = *(node->next);
将两个属性(data
和 next
)从 *(node->next)
复制到 *node
使其完全相同:
(*node).data = (*(node->next)).data
(*node).next = (*(node->next)).next