LeetCode - 61 - 旋转链表 - java

x33g5p2x  于2021-12-23 转载在 Java  
字(0.7k)|赞(0)|评价(0)|浏览(294)

题目

旋转说白了 : 就是 尾巴节点 取代 头节点 。尾巴节点前一个节点成为 新的尾巴节点。

解题思维

代码

/** * 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 cur = head;
        while(cur.next!=null){
            cur = cur.next;
            n++;
        }// 循环结束后 , cur 指向最后一个节点
        int move = n - k % n;// 在知道了 节点个数 和 旋转次数,此时我们就可以求 cur 需要走多少步了。
        if(move == n){// 当旋转次数 和 节点个数 相等时,旋转了跟没旋转一样,索性直接返回 head 头节点。
            return head;
        }
        cur.next = head;// 将整个链表形成一个环
        while(move-- > 0){// cur 开始走 move 步
            cur = cur.next;
        }
        head = cur.next;//
        cur.next = null;
        return head;
        
    }
}

相关文章