我有一个链表,其中包含如下节点:
struct node
{
string Language;
string English;
node* next;
};
我想要做的是找到一个节点,其密钥语言与一个用户输入相同,删除密钥语言和英语,当然,还可以将上一个节点链接到下一个节点。我找到没有问题,但删除,特别是链接对我来说真的很难。有没有半容易的方式?任何提示将非常感激。提前谢谢
答案 0 :(得分:3)
假设您要删除链接列表中的第二个节点,其中root_node
是指向根节点的指针,链接列表的长度为> = 3:
struct node *A;
struct node *B;
struct node *C;
A = root_node;
B = root_node->next;
C = B->next;
delete B;
A->next = C;
我发现删除链表中的节点很好的例子,其中节点既不是头也不是尾:
答案 1 :(得分:0)
这是presudo代码:
//1. find previous node
node* temp = List->head;
while(temp->next != nodeToDel)
temp = temp->next
if(temp != null)
//2. skip the node to be delete
temp->next = nodeToDel->next;
//3. delete nodeToDel
delete nodeToDel;
答案 2 :(得分:-2)
删除节点的简单方法是尝试将前一个链接到下一个节点,然后删除所需的节点。相反,您希望将下一个节点复制到所需节点,将所需节点链接到下一个节点,然后删除下一个节点。假设与用户输入匹配的节点为N
。然后这应该工作:
// Copy appropriate values
N.Language = (N->next).Language;
N.English = (N->next).English;
// Save pointer to node we need to delete
node* next = N->next;
// Link current node to next's next
N->next = (N->next)->next;
// Next node is useless now, so delete it
delete next;