题目:
若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。
假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。
例如,传入节点 c
(位于单向链表 a->b->c->d->e->f
中),将其删除后,剩余链表为 a->b->d->e->f
思路:
假设要删除的是p结点,又不知道前驱的情况下,我们可以用q表示p的后继,把q的值赋给p然后再将p删掉
代码实现:
用C语言实现
struct ListNode {
int val;
struct ListNode *next;
};
void deleteNode(struct ListNode* node) {
struct ListNode *p=node->next;
node->val=p->val;
node->next=p->next;
free(p);
}
用C++实现
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
void deleteNode(ListNode* node) {
ListNode *q=node->next;
node->val=q->val;
node->next=q->next;
delete q;
}
};