没有头指针的删除

问题描述 投票:-1回答:1

问题:在链接列表中间的某个位置为您提供了某个节点,您需要删除该节点。没有为您提供链表的头节点。条件:给定节点旁边至少有一个节点。

节点的结构:

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;

两者都给出正确的结果,但我不理解后一种解决方案的第二行。

c++ algorithm data-structures linked-list singly-linked-list
1个回答
0
投票

第二种解决方案与第一种解决方案相同,不同之处在于它使用类的赋值运算符而不是分别分配成员。


0
投票

结构Node具有默认的副本分配,因为它既没有声明也没有移动分配。

因此*node = *(node->next);将两个属性(datanext)从*(node->next)复制到*node,使其与以下内容完全相同:

(*node).data = (*(node->next)).data
(*node).next = (*(node->next)).next
© www.soinside.com 2019 - 2024. All rights reserved.