专栏首页曌的晓痴LeetCode - 删除链表中的节点 & 移动零

LeetCode - 删除链表中的节点 & 移动零

鉴于这次的两题,异常的短,所以再次合二为一。分别是第237,难度简单,以及283题,难度同样简单。

原题地址:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ & https://leetcode-cn.com/problems/move-zeroes/

题目描述

第一题是删除链表中的节点,题目很长,反正主要就是一句话:

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

第二题是移动零,题目很简单,也是一句话:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

解题思路:

先说第一题,删除链表中的节点,这题确实很简单。直接将节点的next指针,指向原本的next.next节点就可以了。所以不难。

再来说第二题,写的略显复杂了。当时我不懂什么双指针,现在我懂了。所以讲两种方法:

第一种就是我现在写的,单指针遍历数组,遇到非0的,就去后面找0,然后让0和0相邻的元素更换位置。这个是什么鬼操作,我也想不通,可能脑回路出了点问题...

第二种双指针的方法,会快很多。两个指针分别从第一个元素出发。快指针用于寻找非0元素,慢指针用于记录非零元素的个数(也就是坐标)。当快指针找到一个非0元素,那就直接和慢指针所指向的元素换个位置就好了。

比如1,2,3,4,0,5,6,7,0,8,9,0,前4个元素都是正常的,快指针遇到5时,慢指针指向的还是0,所以交换,变成1,2,3,4,5,0,6,7,0,8,9,0。当快指针遇到6时,慢指针指向的还是0。最后就变成了1,2,3,4,5,6,7,8,9,0,0,0。

中文官网题解:

https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/

https://leetcode-cn.com/problems/move-zeroes/solution/

个人题解:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

/**
* 移动零
*/
public class Solution {
    public void moveZeroes(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0 && i != 0) {
                for (int j = i; j > 0 && nums[j - 1] == 0; j--) {
                    int temp = nums[j - 1];
                    nums[j - 1] = nums[j];
                    nums[j] = temp;
                }
            }
        }
    }
}

结果:

下面是分别的运算结果。嗯,移动零的题目,速度莫名的慢。

本文分享自微信公众号 - 曌的晓痴(gh_543795945efe)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 前端面试总结与思考

    序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每...

    李才哥
  • 解决appium升级后不支持使用name定位的问题

    之前一直用的appium1.4版本,最近升级到了1.6突然发现之前的脚本好多都跑失败了,一看报错:

    测试开发社区
  • 有赞前端质量保障体系

    最近一年多一直在做前端的一些测试,从小程序到店铺装修,基本都是纯前端的工作,刚开始从后端测试转为前端测试的时候,对前端东西茫然无感,而且团队内没有人做过纯前端的...

    测试开发社区
  • 深度 | 解析InnoDB引擎

    一、综述 innodb的物理文件包括系统表空间文件ibdata,用户表空间文件ibd,日志文件ib_logfile,临时表空间文件ibtmp,undo独立表空...

    腾讯云数据库 TencentDB
  • 聊聊nacos的HttpHealthCheckProcessor

    nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthChec...

    codecraft
  • python进阶之异步任务

    本文学习视频来自莫凡python,下面是总结的学习内容。 关于星球,我在稍微阐述一点,我用自己的精力在星球中发布小项目,发布日打卡,共同来学习某一块知识,所以改...

    公众号guangcity
  • rocketmq-5:生产级rocketmq集群部署

    集群形式:2m-2s-2namesrv;2个master,2个slave,2个namesrv。

    千里行走
  • 一篇文章搞懂「一致性哈希」

    在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求,起到负载均衡的作用。我们常想到的...

    程序员小强
  • 面试题: 深入理解事件循环机制

    JS异步执行原理: js执行引擎只有一个主线程执行代码逻辑,遇到需要异步执行的任务代码,会将其添加事件队列中。当主线程空闲时,轮询事件队列中可以执行的任务,将其...

    用户1462769
  • IT兄弟连 JavaWeb教程 jQuery对AJAX的支持

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    ITXDL

扫码关注云+社区

领取腾讯云代金券