您的位置:首页 > 其它

61. Rotate List

2016-06-11 18:58 281 查看
题目:

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
.

题意:

给定一个链表,将该链表从右边第k个位置处翻转,这里的k为非负值。

思路:

循环轮询链表,找出链表总长度,将链表的头尾相接,在翻转的位置断开链表即可。

代码:12ms

/**
 * 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 head;
        
        int len = 1;
        ListNode *newH = head, *tail = head;
        
        while(tail->next){
            tail = tail->next;
            len++;
        }
        tail->next = head;
        
        if(k %= len){
            for(auto i=0; i<len-k; i++){
                tail = tail->next;
            }
        }
        newH = tail->next;
        tail->next = NULL;
        return newH;
    }
};
代码:12ms
/**
 * 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 || !head || !head->next) return head;
        ListNode *fast = head;
        int lens = 1;
        while(k--){
            if(fast->next){
                fast = fast->next;
                lens++;
            }else{
                fast = head;
                k %= lens;
            }
        }
        if(fast==head) return head;
        ListNode *slow = head;
        while(fast->next){
            fast = fast->next;
            slow = slow->next;
        }
        ListNode *newHead = slow->next;
        slow->next = NULL;
        fast->next = head;
        return newHead;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: