【C++】删除节点

这篇博客展示了如何在C++中删除链表的指定节点。第一个例子是删除节点P2,通过更新P2的值为P2的下一个节点的值,然后将P2的下一个节点设置为P2的下一个节点的下一个节点,最后释放被删除的节点。第二个例子演示了如何删除P1之后的节点P2,通过直接更新P1的下一个节点为P2的下一个节点,然后删除P2。这两种方法都确保了链表的连续性。
摘要由CSDN通过智能技术生成

1、已知当前节点P2,删除该节点。

在这里插入图片描述

#include<iostream>
using namespace std;
struct ListNode {
    char val;
    ListNode* next;
    ListNode(){}
    ListNode(char x) : val(x), next(NULL) {}
    
};
void print(ListNode* pHead) {
    ListNode* p = pHead->next;
    while (p != NULL) {
        cout << p->val << " ";
        p = p->next;
    }
}
int  main() {
    ListNode* pHead = new ListNode;

    ListNode* P0 = new ListNode('a');
    pHead->next = P0;

    ListNode* P1 = new ListNode('b');
    P0->next = P1;

    ListNode* P2 = new ListNode('c');
    P1->next = P2;

    ListNode* P3 = new ListNode('d');
    P2->next = P3;

    ListNode* P4 = new ListNode('e');
    P3->next = P4;

    ListNode* P5 = new ListNode('f');
    P4->next = P5;
    cout <<"P2的值:"<< P2 << "\n";
    //ListNode* p = P2;
    //P2 = P2->next;
    //delete p;
    cout << "P2的值:" << P2 << "\n";
    cout << "P1->next的值:"<<P1->next << "\n";

    //正确代码
    ListNode* p = P2->next;
    P2->val = p->val;
    P2->next = p->next;
    delete p;
    print(pHead);

	return 0;
}

在这里插入图片描述

2、已知节点P1,删除下一节点P2。

在这里插入图片描述

#include<iostream>
using namespace std;
struct ListNode {
    char val;
    ListNode* next;
    ListNode(){}
    ListNode(char x) : val(x), next(NULL) {}
    
};
void print(ListNode* pHead) {
    ListNode* p = pHead->next;
    while (p != NULL) {
        cout << p->val << " ";
        p = p->next;
    }
}
int  main() {
    ListNode* pHead = new ListNode;

    ListNode* P0 = new ListNode('a');
    pHead->next = P0;

    ListNode* P1 = new ListNode('b');
    P0->next = P1;

    ListNode* P2 = new ListNode('c');
    P1->next = P2;

    ListNode* P3 = new ListNode('d');
    P2->next = P3;

    ListNode* P4 = new ListNode('e');
    P3->next = P4;

    ListNode* P5 = new ListNode('f');
    P4->next = P5;
    
    ListNode* p = P1->next;
    P1->next = p->next;
    delete p;
    print(pHead);

	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值