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. ...
 
随机推荐
- WebAssembly环境搭建
			
Environment:Ubuntu 16.06 + emscripten URL: https://emscripten.org/docs/getting_started/downloads.htm ...
 - Promise、Generator、Async有什么区别?
			
前言 我们知道Promise与Async/await函数都是用来解决JavaScript中的异步问题的,从最开始的回调函数处理异步,到Promise处理异步,到Generator处理异步,再到Asyn ...
 - spring学习四:Spring中的后置处理器BeanPostProcessor
			
BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcesso ...
 - 在CentOS 6.x/7.x上安装git
			
方式一.yum安装 # yum info git Failed to set locale, defaulting to C Loaded plugins: fastestmirror Loading ...
 - html路径
			
一.HTML 相对路径和绝对路径区别分析 HTML初学者会经常遇到这样一个问题,如何正确引用一个文件.比如,怎样在一个HTML网页中引用另外一个HTML网页作为超链接(hyperlink)?怎样在一个 ...
 - Myeclipse设置关键词自动提示功能以及取消空格和"="的自动补全
			
一.设置Myeclipse从a~z的自动提示功能 1. "window"→"Preferences"2. 选择"Java",展开," ...
 - Lua 语言: 语法
			
转载请注明来源:https://www.cnblogs.com/hookjc/ -- 两个横线开始单行的注释 --[[ 加上两个[和]表示 多行的注释.--]] -------------- ...
 - 使用 Element UI Select 组件的 value-key 属性,让绑定值可以为一个对象
			
EsunR 2019-11-07 12:14:42 12264 收藏 6 分类专栏: Vue 文章标签: element-ui 版权 当我们使用 Elemet UI 的选择组件进行多选时,Sele ...
 - 使用java实现圆形运动
			
1 package com.neuedu.test; 2 3 import java.awt.Graphics; 4 import java.awt.Image; 5 6 import com.neu ...
 - Python接口自动化测试_悠悠
			
https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695###