如果问题或者其他方法还请分享,如加入打卡微信搜索bigsai回复进群一起打卡。

K个一组翻转链表

题目要求

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例:

给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5

说明:

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

分析:
本题是K个一组进行翻转,相信大家都有遇到翻转链表实现起来可能容易一些,但是这里面要求K个一组进行翻转,不满足K个就不翻转。并且要求必须交换节点不能创建新的节点。如果K=3,从宏观来看需要交换的可能是这样的:

而具体的一个交换流程该如何考虑呢?一组一组的交换,当组是否还满足K个?如何实现?

  • 用两个指针,一个指针tail预先走K步,如果能正常行走说明可以翻转。

每一组翻转需要整个联立起来,该如何实现呢?可以预先记录首尾,然后再翻转局部将整个链表串联起来。在具体的交换步骤,可以使用一个prenode记录前驱节点以实现交换。

具体实现的代码为:

 public  ListNode reverseKGroup(ListNode head, int k) {if(head==null)return null;ListNode value=new ListNode(0);value.next=head;ListNode pretail=value;//前一个区间末尾ListNode pretailNext=value.next;//交换区间的第一个(交换后会变成最后一个需要连接下一个区间)ListNode tail=head;//末尾用来试探ListNode preNode=null;//记录前驱节点ListNode node=head;//当前节点int index=0;while(tail!=null){while (index++<k) {//拉开K个程度if(tail==null)//不满足反转条件直接返回return value.next;tail=tail.next;}//tail到达固定位置while (index-->1) {//开始反转node//System.out.println(index+" "+head.val);node=head;head=head.next;node.next=preNode;preNode=node;}//连接pretail.next=node;pretailNext.next=tail;pretail=pretailNext;pretailNext=tail;index=0;}return value.next;    }

删除排序数组中的重复项

描述:

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);
// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}

分析:
这题很简单,用一个index标记当前位置,用i遍历判断是否和前一个相等,如果相等不操作,不相等就重新存入,最后这个index返回即可,当然,虽然是个int类型的函数,但是题目要求存到数组中会判定数组的,需要存一下。

实现代码为:

public int removeDuplicates(int[] nums) {int index=1;for(int i=1;i<nums.length;i++){if(nums[i]!=nums[i-1]){nums[index++]=nums[i];}}return index;}

好了,本次打卡结束,如果有兴趣欢迎关注公众号:bigsai,回复进群加入一起打卡。

LeetCode 25K 个一组翻转链表26删除排序数组中的重复项相关推荐

  1. [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项

    这道题我真的纠结好久,因为没注意那个原地的题目要求,所以很奇怪怎么我电脑运行成功,但是LeetCode上运行就是不对.气哭. 感谢群友lino的帮助.他试了set方法不行,直接喂给我的答案了... 题 ...

  2. C++描述 LeetCode 26. 删除排序数组中的重复项

    C++描述 LeetCode 26. 删除排序数组中的重复项   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客 ...

  3. ios 数组中的字典排序_题解 | 26.删除排序数组中的重复项

    假设我们有一个传感器,会不停地向 HQ 传输已经归类好数据,数据的格式全部是数字(种类编号),且已经按照从小到大的顺序排列,大概是 [1,1,4,5,7,9] 这样的,但是我们的需求在于,希望知道有多 ...

  4. 26. 删除排序数组中的重复项 golang

    26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 ...

  5. LeetCode 26. 删除排序数组中的重复项

    1. 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  6. leetcode 26 删除排序数组中的重复项

    https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素 ...

  7. python有序数组中删除元素_python刷LeetCode:26. 删除排序数组中的重复项

    题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  8. LeetCode(#26)————删除排序数组中的重复项

    题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...

  9. LeetCode题 - 26 删除排序数组中的重复项 python实现

    题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...

最新文章

  1. java生成验证码图片中仅有线条_java生成验证码步骤归纳总结
  2. 设计模式------观察者模式
  3. Python 学习日记第二篇 -- 列表,元组
  4. dp线和hdmi区别_HDMI铜线与光纤线有啥区别?为什么铜线传播速度更快?看完涨知识...
  5. Android开发的体会
  6. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...
  7. springboot改文件头_SpringBoot配置文件常用配置示例
  8. 赵鹏的《大师之路》教程
  9. 专题:固体力学中应力与应变分析详解(7.应变分析 7.5应变张量 7.6主应变与主方向 7.7应变莫尔圆)
  10. MySQL中添加新字段
  11. 卷积神经网络的三个特性
  12. 微信开发 注意 js接口安全域名 invail url domain
  13. 信息系统项目管理师-项目沟通管理
  14. 运用BFS算法实现北京地铁路线换乘系统
  15. LaTeX 表示断行和分页
  16. 孙玄:斗胆谈一谈,大数据中台战略,究竟应该如何落地?
  17. android jni传入接口,在Android studio中编写jni ndk接口并打jar包
  18. JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer
  19. C++模板元编程 - 1 基本数据类型和运算
  20. 两种风格的快速排序 Quick Sort

热门文章

  1. EOS开发步骤(1) 开发说明
  2. Chainlink平台预言机
  3. 近世代数--内外直积--本质是一样的
  4. 【django】HttpResponse对象
  5. django中模型类的创建
  6. [Issue Fixed]-不能为虚拟电脑xxx打开一个新任务
  7. 某CMSV1.0代码审计
  8. 【安全漏洞】一次前台任意文件下载漏洞挖掘
  9. 反击CobaltStrike
  10. python获取android手机信息