目录
一、问题描述
二、解题思路
三、代码实现
四、刷题链接
一、问题描述
二、解题思路
1.先确定链表长度为len
2.注意当K>len时,如果每个节点都往右移动len个位置,等价于不移动,所以需要求K=K%len。
3.所有元素右移K个位置,就相当于把最后K个位置元素原封不动的移到开头,原来的开头放到这K个元素的后面。
三、代码实现
import java.util.*;/** public class ListNode {* int val;* ListNode next = null;* public ListNode(int val) {* this.val = val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @param k int整型 * @return ListNode类*/public ListNode rotateLinkedList (ListNode head, int k) {if(head==null){return null;}int len=0;ListNode preHead=new ListNode(-1);preHead.next=head;ListNode nextp=head;ListNode lastnode=head;//先求链表lenwhile(nextp!=null){nextp=nextp.next;len++;}k=k%len;nextp=head;while(lastnode!=null&&k>0){lastnode=lastnode.next;k--;}if(lastnode==null){return head;}else{while(lastnode.next!=null){lastnode=lastnode.next;nextp=nextp.next;}lastnode.next=head;preHead.next=nextp.next;nextp.next=null;return preHead.next;}}
}
四、刷题链接
旋转链表_牛客题霸_牛客网