zoukankan      html  css  js  c++  java
  • leetcode 61 Rotate List ----- java

    Given a list, rotate the list to the right by k places, where k is non-negative.

    For example:
    Given 1->2->3->4->5->NULL and k = 2,
    return 4->5->1->2->3->NULL.
    题目意思不难,就是说给一个数k,然后从右向左数第k个节点,然后以这个节点为开头,重新组成一个链表。

    需要注意的就是如果k大于链表长度len,那么就要k = k%len

    小技巧就是在k<len时,是可以先从前向后数k个数,然后再从当前位置(flag)和head开始向后遍历到结尾,这样效率会高一些。

    但是第一次的速度不是很快,耗时15ms。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode rotateRight(ListNode head, int k) {
            if( k == 0 || head == null){
                return head;
            }
            ListNode flag = head;
            int len;
            for( len = 1;len < k && flag.next != null ; len++){
                flag = flag.next;
            }
            if( len == k){
                if( flag.next == null)
                    return head;
                ListNode result = head ;
                flag = flag.next;
                while( flag.next != null){
                    result = result.next;
                    flag = flag.next;
                }
                flag.next = head;
                flag = result.next;
                result.next = null;
                return flag;
            }
            ListNode last = flag;
            if( k > len)
                k = len - k%len;
            else
                k = len-k;
            if( k == 0 || k == len)
                return head;
            flag = head;
            for( int i = 1;i<k ;i++){
                flag = flag.next;
            }
            last.next = head; 
            head = flag.next;
            flag.next = null;
            return head;
        }
    }

     然后看了看网上1ms的答案,其实也没什么区别,然后拿他们的跑一下,结果15、16ms,所以还是leetcode网站本身(也许是java虚拟机)的问题。

  • 相关阅读:
    c++<ctime>中常用函数
    头文件<cmath>中常用函数
    c++动态数组的使用
    迭代器与指针
    引用和指针做形参时的区别
    c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题
    c++指定输出小数的精度
    Linux命令学习(1)
    Nginx 配置文件nginx.conf中文详解
    Walle实现自动发布
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/5940299.html
Copyright © 2011-2022 走看看