有的网站打开的是html结尾的路径有的不是,明灯赣州网络推广,wordpress 登录用户名,有哪些网站可以做简历leetcode第25题(困难)问题描述给你一个链表#xff0c;每 k 个节点一组进行翻转#xff0c;请你返回翻转后的链表。k 是一个正整数#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍#xff0c;那么请将最后剩余的节点保持原有顺序。示例#xff1a;给…leetcode第25题(困难)问题描述给你一个链表每 k 个节点一组进行翻转请你返回翻转后的链表。k 是一个正整数它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍那么请将最后剩余的节点保持原有顺序。示例给你这个链表1-2-3-4-5当 k 2 时应当返回: 2-1-4-3-5当 k 3 时应当返回: 3-2-1-4-5解题思路整体思路是将原链表分成p(pn个节点 / k)段(逻辑上的分)每段都有一个头节点和一个尾节点。第一步先遍历一次整个原链表当每一组节点满足有k个节点时标记当前组的头节点和尾节点。第二步翻转链表改变每组的头节点和尾节点的引用。返回第一组的头节点即可。这样的时间复杂度就是 O(n)O(n/k)示例代码(java)/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/class Solution {public ListNode reverseKGroup(ListNode head, int k) {return begin(head,k);}public static ListNode th;/*** 拼接反转的链表* param listNode* param k* return*/public static ListNode begin(ListNode listNode,int k){if(k1){return listNode;}thlistNode;LinkedList ovnew LinkedList();while(th!null){ListNode headth;ListNode tailreversal(th,k);ov.addLast(new HeadTail(tail,head));}if(ov.size()0){return null;}else{HeadTail headTailov.removeFirst();ListNode headheadTail.head;ListNode tailheadTail.tail;while(ov.size()0){headTailov.removeFirst();tail.nextheadTail.head;tailheadTail.tail;}return head;}}/*** 反转链表* param node* param k* return*/public static ListNode reversal(ListNode node,int k){ListNode pnull;ListNode n;int i0;while(node.next!null){nnode.next;node.nextp;pnode;noden;i;if(ik-1){break;}}thnode.next;node.nextp;if(inodereversal2(node,k);}return node;}/*** 反转链表* param node* param k* return*/public static ListNode reversal2(ListNode node,int k){ListNode pnull;ListNode n;while(node.next!null){nnode.next;node.nextp;pnode;noden;}node.nextp;return node;}public static class HeadTail {ListNode head;ListNode tail;public HeadTail(ListNode head,ListNode tail){this.headhead;this.tailtail;}}}