首页 > 代码库 > leetcode 61 Rotate List ----- 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虚拟机)的问题。
leetcode 61 Rotate List ----- java
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。