美文网首页
Java-单链表每K个值逆序

Java-单链表每K个值逆序

作者: 坑逼的严 | 来源:发表于2021-03-09 11:31 被阅读0次

记录一下
将给出的链表中的节点每k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
要求空间复杂度O(1)
例如:
给定的链表是1→2→3→4→5
对于 k = 2, 你应该返回 2→1→4→3→5
对于 k = 3, 你应该返回 3→2→1→4→5

public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        //如果头为空,并且头的下一个节点为空,那么不需要翻转直接返回
        if (head == null || head.next == null)
        return head;
        //新起一个变量,接收head,防止head值被修改
        ListNode curHead = head;
        //找到下一个链表中K个值以后的head
        for(int x=1 ; x<k; x++){
            if(curHead != null){
                curHead = curHead.next;
            }
        }
        //如果不足K个值,那么都照着原样返回
        if(curHead == null){
            return head;
        }
        //记录下一次K个值后的头
        ListNode temp = curHead.next;
        //切断原有的连接
        curHead.next = null;
        //翻转这一段的K个值
        ListNode newHead = reverse(head);
        //翻转下一个K段值
        ListNode newTemp = reverseKGroup(temp,k);
        //翻转后的K个值,重新连接
        ListNode tempNode = newHead;
        for(int x = 1; x< k;x++){
            tempNode = tempNode.next;
        }
        tempNode.next = newTemp;
        return newHead;
}
public ListNode reverse(ListNode head){
        if (head == null || head.next == null)
        return head;
        ListNode newNode = reverse(head.next);
        head.next.next = head;
        head.next = null;
        return newNode;
}

相关文章

  • Java-单链表每K个值逆序

    记录一下将给出的链表中的节点每k 个一组翻转,返回翻转后的链表如果链表中的节点数不是k 的倍数,将最后剩下的节点保...

  • 2.单链表

    该部分包含以下内容-单链表的增删改查-计算链表长度-逆序链表-寻找(删除)链表倒数第K个元素-逆序打印链表(使用栈)

  • 5_7链表的k逆序

    有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1-...

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

    给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆 该过序,如果最后不够K个节点一组,...

  • Leetcode-Medium-2 Add Two Number

    题目 思路 给定两哥数字非负的单链表,每条单链表逆序存储着一个数字。将两条单链表存储的数字相加,并逆序放入单链表中...

  • 链表(上:链表反转)

    1. 逆序打印链表(单链表) 给定单链表,从尾到头打印每个节点的值,不同的值之间用空格隔开。比如:1>2>3>4>...

  • LeetCode 2. Add Two Numbers

    单链表逆序相加

  • 算法-链表每k位逆序

    链表的每K位逆序,其实主要的思路就是三个步骤:1.找到k个节点的开始节点和结束节点,还有当前这k个节点的最后一个节...

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • leetcode 单链表的各种算法

    1 递归实现:合并两个有序的单链表 2 递归实现:单链表逆序存入vector 3 循环实现:快慢指针找到单链表中间...

网友评论

      本文标题:Java-单链表每K个值逆序

      本文链接:https://www.haomeiwen.com/subject/gfwvqltx.html