题目描述
给你一个链表的头节点 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++解答
GYL
利用辅助向量,将链表放入,然后先访问k后的,然后再链接到首个位置;
/** * 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; } };