61. 旋转链表

leetcode力扣刷题打卡

题目:61. 旋转链表
描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

解题思路

1、计算出链表长度n,每移动n次就回到了原始状态,因此k = k % n;
2、把链表倒数k个节点直接放在链表前方,就形成了新链表;
3、注意判断链表是否为空以及k是否为0;

原代码##

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if (!head || !k) return head;
        int n = 0;
        ListNode* tail;
        ListNode* p = head;
        while (p) {
            n++;
            tail = p;
            p = p->next;
        }
        p = head;
        k = k % n;
        for (int i = 0; i < n - k - 1; ++i) {
            p = p->next;
        }
        tail->next = head;
        head = p->next;
        p->next = nullptr;
        return head;
    }
};

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