[LeetCode]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.

思考:先首尾连成环,head前进(len-k%len)步,拆环。

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     ListNode *next;

 *     ListNode(int x) : val(x), next(NULL) {}

 * };

 */

class Solution {

public:

    ListNode *rotateRight(ListNode *head, int k) {

        if(head==NULL||k==0) return head;

        ListNode *p=head;

        int len=1;

        while(p->next)

        {

            len++;

            p=p->next;

        }

        p->next=head;

        k%=len;

        int step=len-k;

        while(step--)

        {

            p=p->next;

        }

        head=p->next;

        p->next=NULL;

        return head;

    }

};

  

 

你可能感兴趣的:(LeetCode)