按键删除链表中的节点,c ++

时间:2016-05-20 02:57:37

标签: c++

我有一个链表,其中包含如下节点:

struct node
{
    string Language;
    string English;
    node* next;
};

我想要做的是找到一个节点,其密钥语言与一个用户输入相同,删除密钥语言和英语,当然,还可以将上一个节点链接到下一个节点。我找到没有问题,但删除,特别是链接对我来说真的很难。有没有半容易的方式?任何提示将非常感激。提前谢谢

3 个答案:

答案 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;

我发现删除链表中的节点很好的例子,其中节点既不是头也不是尾: illustration

答案 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;