leetcode 61. 旋转链表

2020-11-05  本文已影响0人  SourceZhang

leetcode

C++:

/**
 * 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 ( k <= 0 || !head || !head -> next ) {

            return head;
        }
        
        int size = 1;
        ListNode *end = head;
        for ( ; end && end -> next; ++size  ) {
            
            end = end -> next;
        }
        
        int move = k % size;
        if ( move == 0 ) {
            
            return head;
        }

        ListNode *previous = head;
        for ( int i = 0; i < size - move - 1; ++i ) {

            if ( previous && previous -> next ) {

                previous = previous -> next;
            }
        }
        ListNode *newHead = previous -> next;
        previous -> next = NULL;
        end -> next = head;

        return newHead;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读