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.


// 注意的一点,k 大于链表总长度的时候,就循环计数,例如 链表为 1-> 2,k = 3,就相当于k = 1 的情况。

class Solution {
public:
    ListNode *rotateRight(ListNode *head, int k) {
        if(head == NULL || head->next == NULL || !k)
        return head;
        ListNode *rhead,*rtail;
        int len = 1;
        rhead = head;
        while(rhead->next) { ++len; rhead = rhead->next;}
        rhead->next = head;
        /*take care: k > len is ok!!!*/
        //if(k >= len) return head;
        k=k%len;
        int stps = 1;
        rtail = head;
        while(stps < len - k) { stps++; rtail = rtail->next; }
        head = rtail->next;
        rtail->next = NULL;
        return head;
    }
};

这里将链表尾指向头结点,构成环。就不用额外处理了,在第一次遍历中就处理好了。

你可能感兴趣的:(Algorithm,LeetCode,C++,链表,遍历)