LeetCode-061-旋转链表
旋转链表
题目描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-list/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:双指针法
首先,如果head为null或者head只有一个节点,直接返回head;
遍历链表head得到链表的长度为length,根据
k % length算得toJump,toJump为实际需要多少位挪到链表前面,如果toJump为0,说明旋转后不需要挪动,直接返回head,如果toJump大于0,则初始化2个节点first和last分别指向头结点,然后利用双指针法,得到需要挪的最后几位,具体处理过程如下:
- 首先将last移动到链表的第toJump位;
- 然后同时移动first和last节点,直到last的next不为空为止。
最后移动到last的next为空,此时last即为原链表的最后一个节点,first的next节点为新的头结点,此时,初始化newHead为first的next节点,然后将first的next置空,first为新链表的最后一个节点,然后将last指向原链表的头结点head,最后返回newHead即为旋转后的链表。
public class LeetCode_061 {
public static ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null) {
return head;
}
ListNode cur = head;
// 链表的长度
int length = 0;
while (cur != null) {
length++;
cur = cur.next;
}
// 需要将倒数 toJump 位挪到 head 节点前面
int toJump = k % length;
if (toJump == 0) {
return head;
}
ListNode first = head, last = head;
while (toJump > 0) {
last = last.next;
toJump--;
}
while (last.next != null) {
first = first.next;
last = last.next;
}
ListNode newHead = first.next;
first.next = null;
last.next = head;
return newHead;
}
public static void main(String[] args) {
ListNode head = new ListNode(0);
head.next = new ListNode(1);
head.next.next = new ListNode(2);
ListNode listNode = rotateRight(head, 4);
while (listNode != null) {
System.out.print(listNode.val + " ");
listNode = listNode.next;
}
}
}
【每日寄语】 只要你今天再多努力一下,那个未来可以像星星一样闪闪发光的人就是你呀!
LeetCode-061-旋转链表的更多相关文章
- LeetCode:旋转链表【61】
LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...
- leetcode 61. 旋转链表
题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输 ...
- LeetCode 61——旋转链表(JAVA)
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...
- LeetCode 61. 旋转链表(Rotate List)
题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出 ...
- Java实现 LeetCode 61 旋转链表
61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = ...
- LeetCode 61——旋转链表
1. 题目 2. 解答 2.1. 方法一 将链表每个节点向右移动 1 个位置,其实就是让链表最后一个结点指向第一个结点. 因此,向右移动 k 个位置就重复上述过程 k 次即可. 然后,我们注意到,若链 ...
- [LeetCode] Rotate List 旋转链表
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- 【LeetCode题解】61_旋转链表(Rotate-List)
目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1-> ...
- LeetCode 61:旋转链表 Rotate List
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. Given a linked list, rotate the list to the right by k pla ...
- leetcode网解题心得——61. 旋转链表
目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ...
随机推荐
- JVM专题1: 类和类加载机制
合集目录 JVM专题1: 类和类加载机制 Java对象的结构 在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域 对象头Header 实例数据Instance Data 对齐填充Pad ...
- 3. hive 常用函数
常用日期函数 1.返回当前或指定时间的时间戳 select unix_timestamp();select unix_timestamp("2020-10-28",'yyyy-MM ...
- X000010
P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意:求 \({\rm S}(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m{\rm lcm} ...
- Atcoder ARC-104
D 可以发现,从整体上来看这个式子是不好计数的,可以考虑反过来将贡献拆到单个的每个数上: \[\sum\limits_{i = 1} ^ n a_i \times (i - x) = 0 \] 于是每 ...
- 样式操作案例5-改变box的大小和位置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Eclipse 找不到或者无法加载主类
最近因为频繁练习JDBC更换了几次驱动jar包,然后突然发现出现了找不到或者无法加载主类的错误, 项目上出现了一个感叹号. 解决方法: 项目-右键 properties-java Build Path ...
- 自动归档autoArchive By H.l
写点简单的代码,让开发更简单 详情:ios 应用实现快速的临时缓存之模型的自动归档 Demo:https://files.cnblogs.com/files/sixindev/AutoArchiver ...
- Java-基于JDK的动态代理
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11686615.html 简单的记录一下Java中自带动态代理的用法. 准备材料: 1.一个接口 ...
- android中listView下拉刷新
Android的ListView是应用最广的一个组件,功能强大,扩展性灵活(不局限于ListView本身一个类),前面的文章有介绍分组,拖拽,3D立体,游标,圆角,而今天我们要介绍的是另外一个扩展Li ...
- 数组中包含多个对象 按照对象中的时间进行排序 适用与Angular.js、Jquery、微信小程序等
LiveList.sort(this.compare('StartDate')) //StartData:需要排序的时间 compare: function (property) { ...