Skip to content

Latest commit

 

History

History
75 lines (54 loc) · 1.63 KB

File metadata and controls

75 lines (54 loc) · 1.63 KB

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1:

输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例 2:

输入:head = [0,1,2], k = 4 输出:[2,0,1]

提示:

链表中节点的数目在范围 [0, 500] 内 -100 <= Node.val <= 100 0 <= k <= 2 * 109

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

实现

/**
 * 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(0==k || null==head || null==head.next){
            return head;
        }

        // 遍历链表得总个数
        ListNode node = head;
        int len = 1;
        while(null != node.next) {
            node = node.next;
            len++;
        }
        int index = len - k % len;
        if (index==0) {
            return head;
        }

        // 将首尾相连成一个环,再找到len-k%len的位置截断返回
        node.next = head;
        while(index-- > 0){
            node = node.next;
        }
        
        ListNode ret = node.next;
        node.next = null;

        return ret;
    }
}