题目描述:
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
思路:
因为给的不是头结点,而是要删除的节点
我的想法是首先创建一个节点去遍历链表,因为链表不是数组,无法用o(1)的时间复杂度去获取当前元素
遍历过程中去对比当前遍历到元素的值与Node节点值是否一致,然后再进行正常的删除操作
但是这样会存在一个问题就是
创建的节点无法指向
所以最正确的做法就是直接保存node 节点的next节点然后让Node节点指向node的next next
这样就达到了删除的目的
不仅要保存指针还要保存元素的值
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
void deleteNode(struct ListNode* node) {
struct ListNode *temp=node->next;
node->val=node->next->val;
node->next=node->next->next;
free(temp);
}