题解 | #链表中的节点每k个一组翻转#TOP3

思路: 1.每K个反转,这个好实现。我们新建一个节点newHead ,初始化为-1,copy 出副本进行操作headPointer,每次遍历节点,它的next指向当前节点,方便下一次遍历的时候,下一个节点可以指向它。如果刚好到k了,那我们headPointer指向当前遍历周期开始的节点。主要是为了能够无缝衔接下一个周期节点。headPointer 主要是为了操作一个周期k个节点中,保存前一个节点,相当于反转链表的pre节点。 2.如果不足k个,我们已经反转了,那就需要再次反转一下。 多理解下


/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        if(k<=0 || head == null){
            return head;
        }
        ListNode newHead = new ListNode(-1);
        ListNode currentNode = head;
        ListNode headPointer = newHead;
        while(true){
            int i = 0;
            ListNode nextStepNode = currentNode;
            ListNode next;
            while(i < k && currentNode != null){
                next = currentNode.next;
                currentNode.next = headPointer.next;
                headPointer.next = currentNode;
                currentNode = next;
                i++;
            }
            if(i == k){
                headPointer = nextStepNode;
            }else{
                for(currentNode = headPointer.next ,headPointer.next = null; currentNode != null;){
                    next = currentNode.next;
                    currentNode.next = headPointer.next;
                    headPointer.next = currentNode;
                    currentNode = next;
                }
                break;
            }
            
        }
        return newHead.next;
    }
}
面试必刷TOP101 文章被收录于专栏

面试必刷TOP101

全部评论

相关推荐

07-04 09:21
已编辑
Java
推拿大师:这是hr发的钓鱼贴吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务