基于给定字符串数据类型的链表删除节点

Posted

技术标签:

【中文标题】基于给定字符串数据类型的链表删除节点【英文标题】:linked list deleting nodes based on given string data type 【发布时间】:2018-06-03 22:36:00 【问题描述】:

大家可以帮我定义一下吗?

基于删除我在 youtube 上看到的第 n 个位置的链表节点,而不是使用 int 数据类型,我尝试使用字符串类型,代码有效,但不是删除特定节点,而是在特定节点之后删除节点节点

 void deletePower(string kat) 
 
     struct  CValue* temp1 = head;
     struct  Lnama* temp2 = newHead;
     if (temp2->kat == kat) 
     
         head = temp1->next;
         newHead = temp2->after;
         delete temp1;
         delete temp2;
         return;
     

     while(temp2->kat != kat)
     
         temp1 = temp1->next;
         temp2 = temp2 ->after;
     

     struct   CValue* temp3 = temp1->next;
     struct  Lnama* temp4 = temp2->after;
     temp2->after = temp4->after;
     temp1->next = temp3->next;
     delete temp3;
     delete temp4;

在我的主要功能中:

int main()

    string first;
    head = NULL;
    newHead = NULL;
    insertMYR(5,1);
    insertMYR(10,2);
    insertMYR(56,3);
    insertMYR(56,4);
    insertLIST("USD",1);
    insertLIST("POUND",2);
    insertLIST("YEN",3);
    insertLIST("RUPIAH",4);
    display();

    cin>>first;
    deletePower(first);

    display();
    system("pause");
    return 0;

当我删除英镑时,它会删除日元,如果我删除卢比,那么在卢比为空之后,所以是的......

【问题讨论】:

【参考方案1】:

你的问题在这里:

while(temp2->kat != kat)

    temp1 = temp1->next;
    temp2 = temp2 ->after;

循环在temp2->kat == kat 时退出,这意味着temp1temp2 指向您要在循环完成时删除的节点。然后继续删除 temp3temp4 之后的节点。

将条件更改为while(temp2->after->kat != kat),您应该删除正确的节点。

【讨论】:

这意味着我需要在 temp2 指向我要删除的节点之前退出循环? 是的,因为您需要将您删除的节点之前的节点指向您删除的节点之后的节点(这就是您的其余代码所做的事情)。 别担心,如果您觉得它充分回答了您的问题,请接受答案!

以上是关于基于给定字符串数据类型的链表删除节点的主要内容,如果未能解决你的问题,请参考以下文章

[数据结构与算法]给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

剑指offer(C++)-JZ18:删除链表的节点(数据结构-链表)

剑指offer(C++)-JZ18:删除链表的节点(数据结构-链表)

剑指offer(C++)-JZ18:删除链表的节点(数据结构-链表)

递归地从链表中删除数据

redis 数据结构基础 链表