问题描述:
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。在O(1)时间复杂度删除该链表节点。
解题思路:
设等待被删除的节点为p,将p的next的值赋给p,将p的next 的指针指向next的下一个。
程序代码:
Definition of ListNode
class ListNode {
public:
int val;
ListNode *next;
ListNode(int val) {
this->val = val;
this->next = NULL;
}
}
class Solution {
public:
void deleteNode(ListNode *node) {
node->val = node->next->val;
node->next = node->next->next;
// write your code here
}
};
class ListNode {
public:
int val;
ListNode *next;
ListNode(int val) {
this->val = val;
this->next = NULL;
}
}
class Solution {
public:
void deleteNode(ListNode *node) {
node->val = node->next->val;
node->next = node->next->next;
// write your code here
}
};
感悟:
在O(1)时间复杂度删除节点的方法可以用在其他地方,比较基础,需记住这种方法。