需要的友友可以看看我首页,有内推码,米哈游有大量岗位,可推
点赞 2

相关推荐

02-28 19:43
门头沟学院 Java
要实现按照 k 个一组反转链表的功能,先将链表按每 k 个节点一组进行划分。对每一组节点进行反转操作。将反转后的组重新连接起来。链表 1->2->3->4->5->6->7,然后需要按照k个一组反转比如k=2,那么需要得到2->1->4->3->6->5->7k=3,得到3->2->1->6->5->4->7```// 定义链表节点类class ListNode {    int val;    ListNode next;    ListNode(int val) {        this.val = val;    }}public class ReverseNodesInKGroup {    public ListNode reverseKGroup(ListNode head, int k) {        if (head == null || k == 1) {            return head;        }        // 创建一个虚拟头节点,方便处理        ListNode dummy = new ListNode(0);        dummy.next = head;        ListNode prev = dummy;        ListNode end = dummy;        while (end.next != null) {            // 找到当前组的最后一个节点            for (int i = 0; i < k && end != null; i++) {                end = end.next;            }            if (end == null) {                break;            }            ListNode start = prev.next;            ListNode nextGroup = end.next;            end.next = null;            // 反转当前组的节点            prev.next = reverseList(start);            start.next = nextGroup;            prev = start;            end = start;        }        return dummy.next;    }    // 反转链表的方法    private ListNode reverseList(ListNode head) {        ListNode prev = null;        ListNode current = head;        while (current != null) {            ListNode nextNode = current.next;            current.next = prev;            prev = current;            current = nextNode;        }        return prev;    }    public static void main(String[] args) {        // 创建链表 1->2->3->4->5->6->7        ListNode head = new ListNode(1);        ListNode node2 = new ListNode(2);        ListNode node3 = new ListNode(3);        ListNode node4 = new ListNode(4);        ListNode node5 = new ListNode(5);        ListNode node6 = new ListNode(6);        ListNode node7 = new ListNode(7);        head.next = node2;        node2.next = node3;        node3.next = node4;        node4.next = node5;        node5.next = node6;        node6.next = node7;        ReverseNodesInKGroup solution = new ReverseNodesInKGroup();        int k = 2;        ListNode newHead = solution.reverseKGroup(head, k);        // 打印反转后的链表        while (newHead != null) {            System.out.print(newHead.val);            if (newHead.next != null) {                System.out.print("->");            }            newHead = newHead.next;        }    }}```
查看4道真题和解析
点赞 评论 收藏
分享
牛客网
牛客企业服务