问答详情
源自:3-6 链表编码实战(四)

删除结点的逆置是为了什么?逆置过程中为什么要将currentNode赋给currentNodeBefore?

为什么要将currentNode赋给currentNodeBefore

提问者:慕数据4823583 2017-03-24 13:10

个回答

  • 潇慕粉
    2017-04-12 23:32:52

    顺序表删除元素,是所有后面的元素往前移动一格。单链表删除节点方便的地方就在这,他不需要所有后面节点前移,而是通过前驱节点连结到后继节点,断开了被删除节点之间的连结。具体实现语句currentNodeBefore->next=currentNode->next;//第i-1个节点与第i+1个节点连接,自然断开与第i个节点的连接。

  • 慕粉1556379847
    2017-03-29 14:51:26

    删除第i个结点需要找到第i和i-1两个结点,所以将currentNode赋给currentNodeBefore,是为了遍历结点,当currentNode为第i个结点的时候,currentNodeBefore是第i-1个结点,然后才能将i-1结点的next指向i+1结点,才能删除i结点、


  • 0puppy0
    2017-03-24 20:06:55

    bool List::ListDelete(int i,Node *pNode)  

    {  

        if(i<0 || i>=m_iLength)   

            return false;  

        Node *currentNode=m_pList;  //保存头节点  

        Node *currentNodeBefore=NULL;    //头节点前一个节点不存在,为NULL

        for(int k=0;k<=i;k++)        //查找第i个节点  

        {  

            currentNodeBefore=currentNode;   //找到第i-1个节点  

            currentNode=currentNode->next;   //循环结束代表currentNode就是第i节点  

        }  

        currentNodeBefore->next=currentNode->next;//第i个节点指针域赋给第i-1节点指针域  

        pNode->data=currentNode->data; //删掉节点的数据域赋给pNode输出  

        delete currentNode;   //释放删除节点的内存  

        currentNode=NULL;  

        m_iLength--;        //节点长度减1  

        return true;  

    }