我是靠谱客的博主 花痴滑板,这篇文章主要介绍Java leetcode 旋转链表,现在分享给大家,希望可以做个参考。

旋转链表

题目描述

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

示例1

复制代码
1
2
3
4
5
6
输入: 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

复制代码
1
2
3
4
5
6
7
8
输入: 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

算法解析

  1. 判断,若head.next = 0 或 k=0 , return head;

  2. 计算链表的长度len,并判断,若k%len == 0,return head;

  3. 若k%len != 0, 另k = k%len;定义两个指针l,r 构成快慢指针;

  4. 先让r先走k次,在l、r同步前进,直到r.next = null结束;

  5. 对l处进行断链,使得ListNode nh = l.next;

  6. 使得l.next = null , r.next = temp;

  7. 返回 return nh;

代码实现:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode rotateRight(ListNode head, int k) { if(head == null || k==0) return head; int len = 0; ListNode temp = head; while(temp!=null) { len++; temp = temp.next; } if(k%len ==0) return head; k = k%len; temp = head; ListNode l = head; ListNode r = head; while(k>0){ r = r.next; k--; } while(r.next!=null){ l = l.next; r = r.next; } ListNode nh = l.next; l.next = null; r.next = temp; return nh; } }

最后

以上就是花痴滑板最近收集整理的关于Java leetcode 旋转链表的全部内容,更多相关Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(110)

评论列表共有 0 条评论

立即
投稿
返回
顶部