[Leetcode]Rotate List

Rotate List
Total Accepted: 55147 Total Submissions: 249704 Difficulty: Medium

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.

Subscribe to see which companies asked this question

/**
 * 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)   return nullptr;
        int len = 0;
        ListNode* p = head;
        while(p){
            ++len;
            p = p->next;
        }
        k %= len;
        if(k == 0)  return head;
        ListNode* f = head;
        for(int i = 0;i <= len - k - 2;++i){
            f = f->next;
        }
        ListNode* h = f->next;
        f->next = nullptr;
        ListNode* pp = h;
        while(pp->next){
            pp = pp->next;
        }
        pp->next = head;
        return h;
    }
};

posted on 2015-12-08 19:20  泉山绿树  阅读(13)  评论(0)    收藏  举报

导航