题目
给定单链表的一个节点(不是最后一个节点),请删除它
分析
没有表头,如何找到这个节点的前一个节点?
方法:采用“懒删除”,当前节点复制下一个节点的内容,然后删除下一个节点
C代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
void deleteNode(struct ListNode* node) {
struct ListNode* tmp = node->next; //保存待删除节点的下一个节点
node->val = tmp->val; //用下一个节点覆盖待删除节点
node->next = tmp->next;
free(tmp); //释放下一个节点
}
C++代码
/**
* 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) {
ListNode* tmp = node->next;
node->val = tmp->val;
node->next = tmp->next;
delete tmp;
}
};