问题:在链接列表中间的某个位置为您提供了某个节点,您需要删除该节点。没有为您提供链表的头节点。条件:给定节点旁边至少有一个节点。
节点的结构:
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;
两者都给出正确的结果,但我不理解后一种解决方案的第二行。
第二种解决方案与第一种解决方案相同,不同之处在于它使用类的赋值运算符而不是分别分配成员。
结构Node
具有默认的副本分配,因为它既没有声明也没有移动分配。
因此*node = *(node->next);
将两个属性(data
和next
)从*(node->next)
复制到*node
,使其与以下内容完全相同:
(*node).data = (*(node->next)).data
(*node).next = (*(node->next)).next