链表-将单链表的每k个节点之间逆序

//将单链表的每k个节点之间逆序
//利用栈结构
public Node reverseKNode(Node head,int k){
    if(k<2){
        return head;
    }
    Stack<Node> stack=new Stack<Node>();
    Node newHead=head;
    Node cur=null;
    Node pre=null;
    Node next=null;
    while(cur!=null){
        next=cur.next;
        stack.push(cur);
        if(stack.size==k){
            pre=resign(stack,pre,next);
            newHead=newHead==head?cur:newHead;
        }
        cur=next;
    }
    return newHead;
}
public Node resign(Stack<Node>,Node left,Node right){
    Node cur=stack.pop();
    if(left!=null){
        left.next=cur;
    }
    Node next=null;
    while(!stack.isEmpty()){
        next=stack.pop();
        cur.next=next;
        cur=next;
    }
    cur.next=right;
    return cur;
}

猜你喜欢

转载自blog.csdn.net/weixin_42146769/article/details/88386906