Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given
return
链表找断点题,注意给出的k可能比链表总长度长因此要进行取模操作,当k=0的时候可以直接返回以免在操作的时候产生环。Given
1->2->3->4->5->NULL
and k = 2
,return
4->5->1->2->3->NULL
.public ListNode rotateRight(ListNode head, int n) { if(head == null || head.next == null || n == 0) { return head; } int cnt = 0; ListNode dummy = new ListNode(0); dummy.next = head; ListNode temp = head; while(temp != null) { cnt++; temp = temp.next; } n = n % cnt; if(n == 0) return head; // return here for safe ListNode temp1 = head; while(n > 1) { temp1 = temp1.next; n--; } temp = dummy; ListNode temp2 = head; while(temp1.next != null) { // we need the tail to relink the list temp1 = temp1.next; temp2 = temp2.next; temp = temp.next; } temp1.next = dummy.next; dummy.next = temp2; temp.next = null; return dummy.next; }
没有评论:
发表评论