leetcode-rotate-list

题目大意

  https://leetcode.com/problems/rotate-list

  从右边第k个位置“反转”链表,看了好半天才明白题意,原来是右边的k个元素作为新链表的前k个元素,剩余的做为新链表的剩余元素。

题目分析

  我的方法是先算出链表长度,然后把前len - k个链接到链表尾部,但要注意一些特殊情况,如果k大于链表长度,则对k取len的模,如果取模等于0,相当于链表不做任何操作。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 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 (head == null) {
return head;
}
int count = 1;
ListNode last = null;
for (last = head; last.next != null; last = last.next) {
count++;
}
k %= count;
if (k == 0) { // 注意此时不要做任何操作
return head;
}
ListNode cur = head;
for (int c = 1; c <= count - k; c++) {
last.next = cur;
last = last.next;
cur = cur.next;
last.next = null;
}
return cur;
}
}