Given a list, rotate the list to the right bykplaces, wherekis non-negative.
For example:
Given1->2->3->4->5->NULLandk=2,
return4->5->1->2->3->NULL.
为了避免k过大,所以要数数到底list有多长。用了很像delete n node from the end的方法找到断点。把链表切开,然后接上。
publicListNoderotateRight(ListNode head,int k) {if (head ==null) {returnnull; }// try to make sure k is smaller than nint n =0;ListNode cur = head;while (cur !=null) { n++; cur =cur.next; } k = k % n;if (k ==0) {return head; }// cur linkedlist at k, then splice them togetherListNode fast = head;ListNode slow = head;while (k >0) { fast =fast.next; k--; }while (fast.next!=null) { fast =fast.next; slow =slow.next; } cur =slow.next;fast.next= head; head = cur;slow.next=null;return head;}