Given a linked list, reverse the nodes of a linked list k at a time
and return its modified list.k is a positive integer and is less than or equal to the length of the
linked list. If the number of nodes is not a multiple of k then
left-out nodes in the end should remain as it is.nodeExample:less
Given this linked list: 1->2->3->4->5this
For k = 2, you should return: 2->1->4->3->5指針
For k = 3, you should return: 3->2->1->4->5code
Note:ip
Only constant extra memory is allowed. You may not alter the values in
the list's nodes, only nodes itself may be changed.
翻轉鏈表的問題,主要是處理週期性的翻轉,如何知道如今的鏈表是否能夠翻轉,咱們能夠預先移動一個指針rem
public ListNode reverseKGroup(ListNode head, int k) { ListNode trueHead=new ListNode(0); trueHead.next=head; ListNode preEnd=trueHead; while(preEnd.next!=null){ ListNode end=preEnd; for(int i=0;i<k && end!=null;i++) end=end.next; if(end==null) break; ListNode pre=end.next; ListNode cur=preEnd.next; for(int i=0;i<k;i++){ ListNode next=cur.next; cur.next=pre; pre=cur; cur=next; } ListNode start=preEnd.next; preEnd.next=pre; preEnd=start; } return trueHead.next; }