1、描述
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/delete-middle-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
链表、中间节点、
假定只能访问中间节点:不知道啥意思
3、思路
删除中间节点,只需要把当前节点的指向换成前一个结点的指向,就把当前节点删除了,可是说了一句,只能访问中间节点,就懵了,不知道如何开始
3、2抄
之后知道,node不是链表中的第一个节点,而是要删除的节点,而只能访问当前节点,所以就只能用next访问当前节点的后面的节点,而不能使用前一个结点,所有,把后边的节点的val值拷贝到当前节点,然后当前节点的后向next指向后一个节点的next,
就是把后一个节点拷贝到当前节点的意思。
3、3开始?
还是不知道怎么写?要遍历吗??
直接用当前node节点就好了。
4、note&con
参数列表:当前节点,还是整个链表,
如何开始
5、复杂度
时间O(N)
空间:O(1)
6、code
/*** 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;node->next=node->next->next; }
};