[google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
2013-10-20 09:27
411 查看
【链表】
Q:Implement an algorithm to delete a node in the middle of a single linked list, given
only access to that node
EXAMPLE
Input: the node ‘c’ from the linked list a->b->c->d->e
Result: nothing is returned, but the new linked list looks like a->b->d->e
题目:实现算法来删除单链表中的中间节点(只知道指向该节点(中间节点)的指针)。
例如:
输入:链表 a->b->c->d->e中指向节点c的指针
输出:无返回值,但新链表变为a->b->d->e
解答:
这是一个尼玛坑爹的解法,刚开始想了好久没想出来,看了提示才知道解法的。这里用到了一个小技巧。要删除中间节点,但是我们不知道要删除节点的上一个节点p,所以无法通过修改指针的方法(p->next=del->next)来删除节点,但知道要删除节点的后一个节点,那么我们换一个思路,把要删除的节点的数据与该节点的后一个节点的数据交换,然后删除后一个节点,从而达到目的。但是该方法不能删除最后一个节点,原因显而易见。
// a tricky solution,can't delete the last one element
int delete_node(NODE* node) {
int data;
NODE *p=node->next;
node->data=p->data;
node->next=p->next;
free(p);
}
作者:Viidiot 微信公众号:linux-code
Q:Implement an algorithm to delete a node in the middle of a single linked list, given
only access to that node
EXAMPLE
Input: the node ‘c’ from the linked list a->b->c->d->e
Result: nothing is returned, but the new linked list looks like a->b->d->e
题目:实现算法来删除单链表中的中间节点(只知道指向该节点(中间节点)的指针)。
例如:
输入:链表 a->b->c->d->e中指向节点c的指针
输出:无返回值,但新链表变为a->b->d->e
解答:
这是一个尼玛坑爹的解法,刚开始想了好久没想出来,看了提示才知道解法的。这里用到了一个小技巧。要删除中间节点,但是我们不知道要删除节点的上一个节点p,所以无法通过修改指针的方法(p->next=del->next)来删除节点,但知道要删除节点的后一个节点,那么我们换一个思路,把要删除的节点的数据与该节点的后一个节点的数据交换,然后删除后一个节点,从而达到目的。但是该方法不能删除最后一个节点,原因显而易见。
// a tricky solution,can't delete the last one element
int delete_node(NODE* node) {
int data;
NODE *p=node->next;
node->data=p->data;
node->next=p->next;
free(p);
}
作者:Viidiot 微信公众号:linux-code
相关文章推荐
- [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
- 给定链表中间节点指针,删除中间节点的方法
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- 给定链表中间节点指针,删除中间节点的方法
- 只知道某个单向链表的中的某个指针,且该指针不是尾指针,如何删除该节点。
- 给定链表中某个节点的指针,删除链表中的该节点
- 1.01一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
- 一个单向链表,不知道头节点,一个指针指向其中一个节点,问如何删除这个指针指向的节点?
- 给定链表中间某结点指针,删除链表中该结点
- 只给出链表某节点的的指针,如何删除它(不允许遍历)
- 给定链表中间某结点指针,删除链表中该结点
- 已知指向节点p的指针,如何删除该节点(不知道链表头)
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
- 面试中常见链表问题11:在链表中删除给定元素值的节点
- 面试金典--删除链表某个节点,只能访问该节点
- 单链表中如何快速删除p指向的节点...
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。