翻转链表与数组去重—— LeetCode 第 25、26 题记

本文记录了作者在 LeetCode 上解题的体验,包括第 25 题“K 个一组翻转链表”和第 26 题“删除排序数组中的重复项”。对于链表翻转问题,作者尝试将链表转化为列表,通过列表切片实现翻转;数组去重问题则利用排序数组的特点,遍历过程中删除重复元素。
摘要由CSDN通过智能技术生成

昨天转载了篇关于递归算法的解读文,很佩服可以透彻掌握算法又能信手拈来做讲解。反思之前我刷题的记录,像是记流水账、没太多营养,所以希望有时间的话能继续深挖下算法,也能加深自己的理解。

今天要刷的两道题,第一个是昨天链表交换节点的升级版的困难级别题目,第二个是对数组去重的简单级别题目。本着能做完就算过关的态度,我先分享自己的尝试,再来观摩题解区可借鉴的思路。

题目一

第 25 题:K 个一组翻转链表

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例:

给你这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

#来源:力扣(LeetCode)
#链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group

说明:

你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

尝试思路

最初是想就着昨天那个能够两两交换节点的递归算法来实现,尝试半天没能写出来,只好先降低难度来解决了。因为对链表不好操作,我们不妨把链表就转化为数字组成的列表,题目也就转化为了将列表中的元素每 k 个进行一翻转:

输入:[1,2,3,4,5]
k = 2 时,输出:[2,1,4,3,5]
k = 3 时,输出:[3,2,1,4,5]

最后再将翻转后的列表按顺序生成链表即可。至于每 k 个元素一翻转,这个过程我是靠列表切片实现的。

比如 lst = [1,2,3,4,5] 列表中,我们可以通过 lst[0] 取其中第一个元素 1,也可以通过切片 lst[2:4] 对列表切片提取其中的第三、四位元素组成的列表。

切片的格式是“列表[起始位置:结束位置:步长]”,起始位置默认为 0、结束位置默认为列表长度值、步长默认为1,lst[:] 即省略掉三者,即 lst 所有元素,lst[::-1] 则将步长调整为 -1,可以实现对列表的翻转或逆向提取得到 [5,4,3,2,1]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值