首页 > 代码库 > LeetCode OJ 61. Rotate List

LeetCode OJ 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.

 

Subscribe to see which companies asked this question

解答:

不是很懂这道题的通过率为何如此之低,其实只要考虑三种边界情况就可以了,一是空链表的时候,二是k是链表节点数整数倍的时候,三是k大于链表节点数的时候……

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* rotateRight(struct ListNode* head, int k) {
    int count = 0, i;
    struct ListNode *pNode = head, *tmp;
    
    if(NULL == head)
        return;
    while(NULL != pNode){
        count++;
        pNode = pNode->next;
    }
    pNode = head;
    for(i = 0; i < count - k % count - 1; i++){
        pNode = pNode->next;
    }
    tmp = pNode->next;
    pNode->next = NULL;
    if(NULL == tmp)
        return head;
    pNode = tmp;
    while(NULL != pNode->next){
        pNode = pNode->next;
    }
    pNode->next = head;
    return tmp;
}

 

LeetCode OJ 61. Rotate List