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.Example:
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
Note:
Only constant extra memory is allowed. You may not alter the values in
the list's nodes, only nodes itself may be changed.
翻转链表的问题,主要是处理周期性的翻转,如何知道现在的链表是否可以翻转,我们可以预先移动一个指针
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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。