LintCode - 旋转链表(中等)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:中等
要求:

给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例

给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null
思路:

解题容易,注意边界处理。

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


public class Solution {
    /*
     * @param head: the List
     * @param k: rotate to the right k places
     * @return: the list after rotation
     */
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null){
            return null;
        }
        
        int len = getLen(head);
        k %= len;
        
        ListNode root = new ListNode(0);
        root.next = head;
        head = root;
    
        for(int i = 0; i < k; i++){
            head = head.next;
        }
        
        ListNode tail = root;
        
        while(head.next != null){
            head = head.next;
            tail = tail.next;
        }
        
        head.next = root.next;
        root.next = tail.next;
        tail.next = null;
        return root.next;
    }
    
    private int getLen(ListNode node){
        int len = 0;
        while(node != null){
            node = node.next;
            len++;
        }
        return len;
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:中等 要求: 你有两个用链表代表的整数,其中每个节点包...
    柒黍阅读 624评论 0 0
  • 题目 给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例给出链表1->2->3->4-...
    六尺帐篷阅读 431评论 0 1
  • 3.10 69.给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 二叉树的层次遍历样例给一棵二叉树 {3...
    mytac阅读 1,104评论 3 3
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,782评论 0 33
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:容易 要求: 给定一个字符串和一个偏移量,根据偏移量旋...
    柒黍阅读 1,600评论 0 1