旋转链表(C++解法)

编程入门 行业动态 更新时间:2024-10-14 14:14:13

旋转链表(C++<a href=https://www.elefans.com/category/jswz/34/1764302.html style=解法)"/>

旋转链表(C++解法)

题目

给你一个链表的头节点 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++代码

#include <iostream>
using namespace std;//创建链表结构体
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) {}
};/*
* 旋转链表问题
* 先算出链表的长度,将最后一个节点指向头节点形成环状链表
* 计算旋转后链表需要断开的位置,断开链表,返回新链表
*/
ListNode* rotateRight(ListNode* head, int k) {if (k == 0 || head == nullptr || head->next == nullptr) {return head;}int n = 1;ListNode* iter = head;while (iter->next != nullptr) {n++;iter = iter->next;}iter->next = head;int add = n - k % n;if (add == n) {return head;}while (add) {iter = iter->next;add--;}ListNode* ans = iter->next;iter->next = nullptr;return ans;
}int main() {ListNode* n1 = new ListNode(1);ListNode* n2 = new ListNode(2);ListNode* n3 = new ListNode(3);ListNode* n4 = new ListNode(4);ListNode* n5 = new ListNode(5);n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = nullptr;ListNode* head = n1;int k = 2;ListNode* ans = rotateRight(head, k);while (ans) {cout << ans->val << " ";ans = ans->next;}delete n1, n2, n3, n4, n5;return 0;
}

分析

旋转链表问题,先算出链表的长度,将最后一个节点指向头节点形成环状链表,计算旋转后链表需要断开的位置,断开链表,返回新链表。

更多推荐

旋转链表(C++解法)

本文发布于:2023-11-16 18:40:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631719.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:解法   链表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!