( Leetcode 61 ) Rotate List

题目:Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

解题思路:

1.  首先求的链表的长度, 如果k值超过了链表长度,将其与链表长度取模

2.  接下来设置两个指针p和q,首先将p移动k个结点,之后p和q同时移动

3. 接下来就是拼接了,不详细说了,具体代码里面有注释


具体Java代码见下面:

public class Solution {
    public static ListNode rotateRight(ListNode head, int k) {
        if( k <= 0 || head == null ){
            return head;
        }
        ListNode p = head;  
        int len = 0;
        while( p != null ){
            if( p.next == null ){
                pre = p;
            }
            p = p.next;
            len++;
        }
        //如果k超过链表长度,取模
        k = k % len; 
        p = head;
        for( int i =1; i <= k; ++i ){
            p = p.next;
        }
        /********************
		下面当循环结束的时候p指向最后一个节点
		q指向倒是第k+1个结点,例如链表1 2 3 4 5 ,k = 2时
		循环结束 p = 5, q = 3
		*/
        ListNode q = head;
        while( p.next != null ){
            q = q.next;
            p = p.next;
        }
		//此时将后半段接到head前面,前半段最后一个节点指针赋值null
		//重新更改head节点指向
        p.next = head;
        head = q.next;
        q.next = null;
        
        return head;
    }
}


你可能感兴趣的:(java,LeetCode,list,linked)