leetcode237 删除节点 非末尾节点

2020-02-23  本文已影响0人  乔大叶_803e

经过这两天的思考,发现自己必须从最简单的开始进行刷,要不实在是刷不动

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

现有一个链表 -- head = [4,5,1,9],它可以表示为:

示例 1:

输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:

输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.

首先我们要先明白我们要删除一个节点的话,就是修改之前的节点的指针指向后一节点,并把这个节点删除就行了。


但是在实际中我们无法获知前一个节点,所以我们的做法是把后一节点的值赋给当前节点,然后把当前节点连接到后一节点的next节点上。


只要我们删除的不是末尾节点都是可以这样操作的。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        node->val = node->next->val;
        ListNode* p = node->next;
        node->next = p->next;
        delete p;
    }
};

delete运算符使用一般格式为 delete[]指针变量

例如要撤销用new开辟的存放单精度数的空间(上面第5个例子),应该用   delete p;

delete [] pt;//在指针变量前面加一对方括号,表示是对数组空间的操作

指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。

上一篇 下一篇

猜你喜欢

热点阅读