zoukankan      html  css  js  c++  java
  • [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?

    【链表】

    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


  • 相关阅读:
    聪明人 & 普通人
    13种模型及方法论
    面向大规模商业系统的数据库设计和实践
    分治算法
    软件架构
    隐含前提思维模型
    Git回滚代码到某个commit
    使用arthas排查 test 问题
    Arthas
    docker 操作入门
  • 原文地址:https://www.cnblogs.com/jjdiaries/p/3378765.html
Copyright © 2011-2022 走看看