【奇技淫巧】-- 原地旋转链表
发布日期:2021-06-30 19:45:54 浏览次数:2 分类:技术文章

本文共 1266 字,大约阅读时间需要 4 分钟。

题目

给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:输入: 0->1->2->NULL, k = 4输出: 2->0->1->NULL解释:向右旋转 1 步: 2->0->1->NULL向右旋转 2 步: 1->2->0->NULL向右旋转 3 步: 0->1->2->NULL向右旋转 4 步: 2->0->1->NULL

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-list

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

链表中的点已经相连,一次旋转操作意味着:

先将链表闭合成环找到相应的位置断开这个环,确定新的链表头和链表尾

在这里插入图片描述

代码实现

class Solution {
public ListNode rotateRight(ListNode head, int k) {
// base cases if (head == null) return null; if (head.next == null) return head; // close the linked list into the ring ListNode old_tail = head; int n; for(n = 1; old_tail.next != null; n++) old_tail = old_tail.next; old_tail.next = head; // find new tail : (n - k % n - 1)th node // and new head : (n - k % n)th node ListNode new_tail = head; for (int i = 0; i < n - k % n - 1; i++) new_tail = new_tail.next; ListNode new_head = new_tail.next; // break the ring new_tail.next = null; return new_head; }}> 作者:LeetCode> 链接:https://leetcode-cn.com/problems/rotate-list/solution/xuan-zhuan-lian-biao-by-leetcode/> 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载地址:https://lion-wu.blog.csdn.net/article/details/107609000 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【奇技淫巧】-- 搜索旋转数组
下一篇:【奇技淫巧】-- 盛水最多的容器

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月12日 17时41分16秒