盒子
盒子

61_旋转链表_leetcode

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

输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL

题解: 首先将整个链表闭环,然后断开,重新设置头与尾,返回即可

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
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null) {
return head;
}
int len = 0;
ListNode pre = new ListNode(0);
pre.next = head;
while (pre.next != null) {
pre = pre.next;
len++;
}
pre.next = head;

int step = len - k % len - 1;
while (step-- > 0) {
head = head.next;
}
ListNode ans = head.next; // 新的头
head.next = null; // 新的尾
return ans;
}
}

AC传送门leetcode

支持一下
扫一扫,支持沈健
  • 微信扫一扫
  • 支付宝扫一扫