旋转链表(rotateRight) Leetcode 20

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

旋转链表(rotateRight) Leetcode 20

旋转链表(rotateRight) Leetcode 20 

旋转链表(rotateRight) Leetcode 20 

主要思想:

1、先统计链表结点的总数

2、再将链表的尾结点连接到第一个结点

3、再找到链表的倒数第k+1个结点        //通过将从head结点,向后移动n-k+1次即可  (通过定义一个变量值为n-k%n+1即可)

4,断开第k+1个结点和倒数第k个结点的链接

5、返回倒数第k个结点作为新链表的头结点

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;    //n-k
        if (add == n) {
            return head;
        }
        iter.next = head;
        while(add>0){           //移动一下是倒数第n个,2 n-1移动n下,是倒数第1个  n-k   n-(n-k-1)=倒数第K+1个
            iter=iter.next;
            add--;

        }
        ListNode new_h = iter.next;
        iter.next=null;

        return new_h;

//        while (add-- > 0) {     //add = n-k  向后移动 n-k个
//            iter = iter.next;
//        }
//        ListNode ret = iter.next;
//        iter.next = null;

    }
}

上一篇:Python快速入门03


下一篇:创建android画笔程序的例子(有镜面效果)