类似于找链表的后k个节点
不同的是要把前边的接到后边
public ListNode rotateRight(ListNode head, int k) { //特殊情况 if (head==null||head.next==null||k==0) return head; int len = 0; ListNode p = head; //计算链表长度,防止k大于长度 while (p!=null) { len++; p = p.next; } //k大于等于len的情况 k = k>=len?k%len:k; if (k==0) return head; //下边是链表取后k个节点的方法,重要,双指针 p = head; while (k-->0) { p = p.next; } ListNode q = head; while (p.next!=null) { p = p.next; q = q.next; } //找到目标节点开始位置 ListNode res = q.next; //将原链表断开位置的后边置为null q.next=null; //将前边的链表接上 ListNode temp = res; while (temp.next!=null) { temp = temp.next; } temp.next = head; return res; }