LeetCode 面试经典150题 [62/150 旋转链表]


avatar
GuoYulong 2024-07-04 65

题目描述

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]

个人C++解答


利用辅助向量,将链表放入,然后先访问k后的,然后再链接到首个位置;

GYL
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if (head == nullptr) return head;
        ListNode * result = new ListNode();
        ListNode * p = head, *q = result;
        vector<ListNode*> vtr;
        while(p){
            vtr.push_back(p);
            p = p->next;
        }
       
        for(int i=vtr.size()-k%vtr.size();i<vtr.size();i++){
            q -> next = vtr[i];
            q = q->next;
        }
        vtr[vtr.size()-k%vtr.size()-1]->next = nullptr;
        q->next = vtr[0];
        return result->next;
    }
};

相关阅读

注意!!!

新增会员中心页面,方便管理个人账户,充值功能暂不开启,请勿为本网站进行任何充值活动!!!

通知!!!

① 过年好!!!拖更几个月了已经,年后继续更新!!