(LC)61。リンクリストの回転

61.リンクリストのローテーション

リンクリストのヘッドノードを指定し、リンクリストを回転して、リンクリストの各ノードを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の範囲です。

/**
 * 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 (k==0 || head==null || head.next==null) {
    
     // 判断是有一个或者为空
            return head;
        }
        int n=1;
        ListNode iter = head;

        while (iter.next != null) {
    
     // 计算有多少个元素 为了计算偏移量
            iter = iter.next;
            n++;
        }
        int add = n-k%n; // 如果k>n则会重复反转

        if (add == n) {
    
     // add==n 则不需要反转
            return head;
        }
        iter.next = head;

        while (add-- > 0) {
    
     // 反转过程
            iter = iter.next;
        }
        ListNode ret = iter.next; // 返回的链表
        iter.next = null;
        return ret;
    }
}


おすすめ

転載: blog.csdn.net/weixin_45567738/article/details/115260133