LeetCode——Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
得到链表长度。链表指向尾节点,将链表首尾相连,向右k%len。得到结果链表的尾节点。
public class RotateList { public static void main(String[] args) { ListNode head = new ListNode(1); ListNode head1 = new ListNode(2); ListNode head2 = new ListNode(3); ListNode head3 = new ListNode(4); ListNode head4 = new ListNode(5); head.next = head1; head1.next = head2; head2.next = head3; head3.next = head4; // while(head != null){ // System.out.println(head.val); // head = head.next; // } ListNode ln = new RotateList().rotateRight(head, 2); while(ln != null){ System.out.println(ln.val); ln = ln.next; } } public ListNode rotateRight(ListNode head, int n) { if(head == null) return head; int len = 1; ListNode tmp = head; while(tmp.next != null){ tmp = tmp.next; len ++; } tmp.next = head; n %= len; int step = len - n; while(step > 0){ tmp = tmp.next; step --; } head = tmp.next; tmp.next = null; return head; } } // Definition for singly-linked list. class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } }