力扣61——旋转链表

力扣61——旋转链表_第1张图片

解题思路

一次遍历获得链表长度,根据k的大小和链表长度确定旋转完的转折点;
将答案指向转折点,转折点之前的一位断链,链表尾部接上头部,就获得答案了

代码

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        int n = 0;
        if(head == nullptr) return head;
        ListNode* tmp = head;
        ListNode* last;
        while(tmp) {
            n++;
            last = tmp;
            tmp = tmp->next;
        }
        if(k % n == 0) return head;
        int cnt = n - (k % n) - 1;
        tmp = head;
        while(cnt--) {
            tmp = tmp->next;
        }
        ListNode* ans = tmp->next;
        tmp->next = nullptr;
        last->next = head;
        return ans;
    }
};

你可能感兴趣的:(算法,链表,leetcode,算法)