61. 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.

分析:
先令一個指針node跑到最後的一個節點(非NULL)處;
讓node的下一個指針指向頭結點形成環形單鏈表;
然後就是計算要遍歷的次數。這裏分爲三種情況:
1.k>n: k=k%n>0;
2.k

/**
 * 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 NULL;
        ListNode* node=head;
        int n=1;//這裏必須爲1,否則後面k=k%n的時候不對
        while(node->next){
            node=node->next;
            n++;
        }
        node->next=head;
        if(k %= n)
        {
            int n1=n-k;//循環次數
            while(n1--!=0) node=node->next;
        }
        ListNode* newhead=head;
        newhead=node->next;
        node->next=NULL;
        return newhead;
    }

};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章