概述
题目描述:
标签:链表 双指针
给你一个链表的头节点
head
,旋转链表,将链表每个节点向右移动k
个位置。
代码:
思路分析:
1、首先要有链表环的思想,如果移动的k是链表长度n的倍数,则说明没有移动保持原样,所以这里要有对k%n取余的思想。当形成链表环之后,要找到链表的最后一个节点是哪个,然后在该节点处断开即可。
2、处理特殊情况,链表为空或者链表长度为1,都返回原链表即可
3、统计链表长度,这里要注意因为要将最后一个节点与链表头连接在一起,所以不能用cur==null来作为循环结束条件,cur.next==null来判断,保证跳出循环时,当前指针cur指向最后一个节点
4、找到断开节点的位置是n-k%n,如果k是n的倍数,则直接返回add
5、将链表连成环形,cur.next=head
6、重新循环,将cur指针移动到断开节点处,并cur.next就是链表头,并将cur.next=null
7、返回head即可
/**
* Definition for singly-linked list.
* public class ListNode {
*
int val;
*
ListNode next;
*
ListNode() {}
*
ListNode(int val) { this.val = val; }
*
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(k == 0 || head == null || head.next == null){
return head;
}
int n = 1;
ListNode cur = head;
while(cur.next != null){
cur = cur.next;
n++;
}
int add = n - k % n;
if(add == n){
return head;
}
cur.next = head;
while(add-- > 0){
cur = cur.next;
}
head = cur.next;
cur.next = null;
return head;
}
}
最后
以上就是帅气画板为你收集整理的LeetCode61—旋转链表(java版)的全部内容,希望文章能够帮你解决LeetCode61—旋转链表(java版)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复