237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾的)节点,您将只被给予要求被删除的节点。
比如:假设该链表为 1 -> 2 -> 3 -> 4 ,给定您的为该链表中值为 3 的第三个节点,那么在调用了您的函数之后,该链表则应变成 1 -> 2 -> 4 。
/**
* 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=node->next->next;
delete(p);
}
};
主要思路:链表的节点中包含两项,一项是值,一项是指向下一个节点的指针。当前题目中,只给你一个节点,让你删除该节点,(删除节点的方法:1、找到当先节点的前一节点,使前一节点的指针直接指向当前节点的下一节点;2、将当前节点的下一节点的值复制到当前节点的值,将当前节点的下一节点的指针复制到当前节点的指针,例:node->val=node->next->val; node->next=node->next->next;),根据题目所示,由于不能获取前一节点,所以使用第二种方法。由于下一节点已经全部复制到当前节点,所以下一节点已经无作用,进行删除可以释放内存。
网友评论