经过这两天的思考,发现自己必须从最简单的开始进行刷,要不实在是刷不动
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 -- 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成了空指针。
网友评论