美文网首页
链表分组反转,不足一组不反转

链表分组反转,不足一组不反转

作者: 大道至简_6a43 | 来源:发表于2020-09-04 15:15 被阅读0次

链接:https://www.nowcoder.com/questionTerminal/25ba57f0f5394efe9c2fff2a164e26e4

来源:牛客网

给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表。

  如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

输入描述:

第一行:依次输入链表中的各个元素,以"#"结束

第二行:每组数量k

输出描述:

处理后的链表中的各个元素,以"->"连接

示例1

输入

1 2 3 4 5 #

2

输出

2->1->4->3->5

示例2

输入

1 2 3 4 5 #

3

输出

3->2->1->4->5

import java.util.*;

class ListNode{

    int val;

    ListNode next = null;

    ListNode(int val){

        this.val = val;

    }

}

public class Main{

    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);

        while (sc.hasNextLine()){

            String[] str = sc.nextLine().split(" ");

            int k = Integer.valueOf(sc.nextLine());

            ListNode pre = new ListNode(Integer.valueOf(str[0]));

            ListNode head = pre;

            for (int i=1;i<str.length-1;i++){

                ListNode node = new ListNode(Integer.valueOf(str[i]));

                pre.next = node;

                pre = node;

            }

            pre.next = null;

            head = reverse(head, k);

            while (head != null){

            if(head.next!=null){

                System.out.print(head.val+"->");

            }else{

                System.out.print(head.val);

            }

            head = head.next;

            }

        }

    }

    public static ListNode reverse(ListNode head, int k){

        ListNode tmp = head;

        for (int i=1;i<k&&tmp!=null;i++)

            tmp = tmp.next;

        if (tmp == null) return head;

        ListNode Lhead = tmp.next;

        tmp.next = null;

        ListNode newHead = revK(head);

        ListNode newLHead = reverse(Lhead, k);

        head.next = newLHead;

        return newHead;

    }

    public static ListNode revK(ListNode head){

        ListNode tmp = null, pre = null;

        while (head != null){

            tmp = head.next;

            head.next = pre;

            pre = head;

            head = tmp;

        }

        return pre;

    }

}

相关文章

  • 链表分组反转,不足一组不反转

    链接:https://www.nowcoder.com/questionTerminal/25ba57f0f539...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 07-06:链表review1

    链表的常见问题 1、链表反转 1)链表反转 2)每k个一组节点反转 https://leetcode-cn.com...

  • 03-28:链表节点每K个反转

    链表节点每K个反转 关键思路: (1)每K个节点,反转K-1次 (2)反转一组后,继续从头再进行反转,重新定位链表...

  • 链表反转

    循环反转链表 递归反转链表

  • 2022-02-26k个一组反转链表

    可以借鉴以前的反转链表的代码,然后分别一组一组的反转。属于细节题目,适合反复训练

  • 算法学习(链表相关问题)

    LeetCode 206 反转链表 LeetCode 92 反转链表II (练习) 完成,方法:在反转链表上改 L...

  • 5个链表的常见操作

    链表 链表反转 LeetCode206:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 环路检...

  • JZ-015-反转链表

    反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。题目链接: 反转链表[https://www.no...

  • leecode刷题(22)-- 反转链表

    leecode刷题(22)-- 反转链表 反转数组 反转一个单链表。 示例: 进阶:你可以迭代或递归地反转链表。你...

网友评论

      本文标题:链表分组反转,不足一组不反转

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