链表删除最后一个节点c++

Linked list deleting last node c++

本文关键字:c++ 节点 最后一个 删除 链表      更新时间:2023-10-16

我目前正在编写一些代码,将从链表中删除最后一个节点,我有下面的代码;但是它正在将前一个节点删除到最后一个节点;而不是最后一个节点本身。

任何帮助都将不胜感激:

if(p!=NULL) {
    if( p->next!=NULL) {
        Student *todel = p->next;       
        p->next= p->next->next;
        delete todel; //free(todel);
    } else {
        delete p; //If n = 0 && its the last element, delete it
    }
}

编辑:

我现在已经将此代码编辑为如下所示。。。。。。它不起作用;是因为我指向了一个空值,然后删除了那个空值吗?

if(p!=NULL) {
    if( p->next==NULL) {
            delete p;
  } 
}

检查这个。

    if(p!=NULL) {
    if ( p->next!=NULL) {
       while (1) {
        Student *todel = p->next;  
        if (todel->next == NULL) {
          // todel is indeed the last node, delete it
          delete todel;
          p->next = NULL;
          break; // break from infinite while loop that was looking for last node
        }
        else {
           // todel is not last node, go further
           p = todel->next;
        }
     }
  } else {
        delete p; //If n = 0 && its the last element, delete it
  }

}

请在用于遍历链表的循环中尝试以下操作。

  if(p->next!=NULL) {
        if (p->next->next == NULL) {// Found the second-to-last-node
          delete p->next;  // Kill the last node
          p->next = NULL;  // Make the current node the last node.
      }
  } 

试试这个,我没有测试它。

void delete_lastnode(Node* head)
{
    Node *p = head;
    if (p == NULL)  // NULL list
        return;
    if (p->next == NULL) // Single node list
    {
        delete head;
        head = NULL;
        return;
    }
    while(p->next->next != NULL) // Find the second-last node
    {
        p = p->next;
    }
    Node* temp = p->next;
    p->next = NULL;
    delete temp;
    temp = NULL;
}