1.问题
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。
给定 1->2->3->4
,和节点 3
,删除 3 之后,链表应该变为1->2->4
2.思路
这是我在lintcod上做的第一道题,soeasy(只是做完了之后是这感觉:))本来想的挺麻烦的,就觉得还不是得遍历吗,可时间复杂度不符合。最后才想到,要删除的是前一个,直接用下一个节点覆盖上一个就好了。
3.代码
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param node: a node in the list should be deleted
* @return: nothing
*/
void deleteNode(ListNode *node) {
// write your code here
ListNode *T=head;
while(T!=NULL)
{
if(T->next==node)
{ T->next=T->next-next;
delete node; }
else
{ T=T->next;}
}
return;
}
};
4.感想
看到一句话的代码ac后,当时觉得自己智商果然有问题…
多学点东西,不说学知识,最起码能长脑子…