• 面试题 02.03. 删除中间节点


    题目描述:

    实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。

     

    示例:

    输入:单向链表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);
    }
    

      

  • 相关阅读:
    postman的本地安装教程
    06-Hibernate中的持久化类
    05-Hibernate的核心API及使用c3p0连接池
    04-Hibernate的常见配置
    03-Hibernate的入门
    02-Hibernate的日志记录
    01-Hibernate框架的概述
    15-struts2 提供的异常处理
    14-struts2的表单标签
    13-struts2中json插件使用
  • 原文地址:https://www.cnblogs.com/redzzy/p/13556859.html
Copyright © 2020-2023  润新知