难度:中等
给你一个链表的头节点
head
,旋转链表,将链表每个节点向右移动k
个位置。摘自:leetcode-61
理解了头结点。剩下就是指针调整。
- 首先我们需要将链表头尾相连。
剩下我们只有2件事需要解决:
- 找到链表应该的尾节点【根据题意 链表长度 size和k 的关系,得到可以知道】,并且将尾节点.next 置为 null;
- 找到头结点。暂存尾节点.next节点。然后返回即可。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head == null || head.next == null) return head;
ListNode cur = head;
int i = 1;
//循环结果 cur.next == null 也就是说 cur是最后一个元素
while (cur.next != null){
cur = cur.next;
i++;
}
if(k > i){
k = k%i;
}
if(k == 0 || k == i) return head;
cur.next = head;
k = i - k - 1;
while (k != 0){
head = head.next;
k--;
}
ListNode next = head.next;
head.next = null;
return next;
}
}
作者:luo-san-shuo
链接:https://leetcode-cn.com/problems/rotate-list/solution/fan-zhuan-lian-biao-sheng-ji-ban-by-luo-o5abx/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。