其實就是將鏈表從 第 size-k個位置截斷,然後將後半部分拼接到前半部分。(其中size是鏈表的長度,k需要處理一下,k=size%k,如果k=0的話,就相當於是沒有移動)
/** * 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) { ListNode cur = head,kNode=null,kNextNode=null,lastNode=null; int size = 0; while(cur!=null){ size++; lastNode = cur; cur = cur.next; } if(size==0) return head; k = k%size; if (k==0) return head; k = size-k; cur = head; size = 0; while(cur!=null){ size++; if (size==k){ kNode = cur; kNextNode = cur.next; break; } cur = cur.next; } lastNode.next = head; kNode.next = null; return kNextNode; } }