题目:
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,表示从右边开始走,然后将右边的k各节点重新放到头结点这里,但是注意这个k是可以循环的,所以k首先得对单链表的长度取模。其他题目的解答在代码里。
public static ListNode rotateRight(ListNode head,int k)
{
if(head == null || head.next == null)
return head;
ListNode slow = head;
ListNode fast = head;
ListNode preNode = new ListNode(-1);
preNode.next = head;
int length = 0;
ListNode curr = head;
while(curr != null)
{
length++;
curr = curr.next;
}
k = k % length;
if(k == 0)
return head;
while(k-- > 1 && fast != null)
{
fast = fast.next;
}
ListNode pre = new ListNode(-1);
pre.next = slow;
while(fast.next != null)
{
pre = slow;
slow = slow.next;
fast = fast.next;
pre.next = slow;
}
fast.next = preNode.next;
preNode.next = slow;
pre.next = null;
return preNode.next;
}