[LeetCode]25. Reverse Nodes in k-Group

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.node

Example: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;
}
相關文章
相關標籤/搜索