C++链表经验分享(代码随想录)

个人云笔记(现在内容少,不太建议大家看)

1、设置一个虚拟结点在进行移除节点操作

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点
        dummyHead->next = head; // 将虚拟头结点指向head,这样方面后面做删除操作
        ListNode* cur = dummyHead;
        while (cur->next != NULL) {
            if (cur->next->val == val) {//创建一个临时指针 tmp,用于保存当前节点 cur 的下一个节点。
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            }
            else {
                cur = cur->next;
            }
        }
        head = dummyHead->next;//新链表的头结点。
        delete dummyHead;
        return head;

在移除链表中特定元素时,需要删除当前节点的下一个节点。为了在删除节点后不丢失对下一个节点的引用,可以使用临时指针 tmp 来保存下一个节点的指针。(GPT回答)

2、遍历链表时为什么要定义一个临时指针?而不是直接操作头指针?

因为我们操作完链表之后我们要返回头节点,如果直接操作头节点,头节点的只就改了,就无法返回头节点了。所以我们定义一个临时指针,让它指向头节点。

3、临时指针的作用

   void deleteAtIndex(int index) {
        if (index >= _size || index < 0) {
            return;
        }
        LinkedNode* cur = _dummyHead;
        while(index--) {
            cur = cur ->next;
        }
        LinkedNode* tmp = cur->next;
        cur->next = cur->next->next;
        delete tmp;
        //delete命令指示释放了tmp指针原本所指的那部分内存,
        //被delete后的指针tmp的值(地址)并非就是NULL,而是随机值。也就是被delete后,
        //如果不再加上一句tmp=nullptr,tmp会成为乱指的野指针
        //如果之后的程序不小心使用了tmp,会指向难以预想的内存空间
        tmp=nullptr;
        _size--;
    }

临时指针 tmp 的作用是在删除节点之前保存要删除的节点的地址,以便在释放内存后避免成为悬空指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值