[经典面试题]k节点一组旋转链表
来源:互联网 发布:u盘安装ubuntu工具包 编辑:程序博客网 时间:2024/05/01 05:35
【题目】
给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6。
如果节点的数量是不k的倍数则最终留出节点应该保持原样,每K个一反转,不到k个不用反转。用程序实现。
------美团校招
来自LeetCode :Reverse Nodes in k-Group
【代码】
#include <iostream>#include <list>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};// head不带头结点// k 旋转个数// 最后不满k个不用旋转ListNode *ReverseKGroup(ListNode *head, int k) { // 容错处理 if(head == NULL || k < 2){ return head; } //添加头结点 ListNode *dummy = new ListNode(0); dummy->next = head; ListNode *pre,*cur,*tail; pre = dummy; // 分组旋转的第一个节点即旋转后的尾节点 tail = head; // 当前节点 cur = head; int count = 0; // 统计节点个数 while(cur != NULL){ cur = cur->next; count++; } // 旋转次数 int rCount = count / k; // 分组旋转下标 int index = 0; // 旋转 while(rCount){ // 分组旋转 // k节点只需旋转k-1节点 index = k-1; while(index){ //先删除 cur = tail->next; tail->next = cur->next; //再插入 cur->next = pre->next; pre->next = cur; index--; }//while pre = tail; tail = tail->next; rCount--; }//while return dummy->next;}int main(){ int A[] = {1,2,3,4,5}; ListNode *head = new ListNode(0); head->next = NULL; ListNode *node; ListNode *pre = head; for(int i = 0;i < 5;i++){ node = new ListNode(A[i]); node->next = NULL; pre->next = node; pre = node; } head = ReverseKGroup(head->next,3); while(head != NULL){ cout<<head->val<<" "; head = head->next; } cout<<endl; return 0;}
0 0
- [经典面试题]k节点一组旋转链表
- 微软,Google面试题 (9) —— 查找链表的倒数第K个节点
- 剑指offer 面试题15 链表中的倒数第k个节点
- 剑指Offer---面试题15:链表中的倒数第k个节点
- 剑指offer面试题22:链表的倒数第k个节点 java
- offer面试题二-----寻找链表的倒数第K个节点
- 【剑指offer】面试题22:链表中的倒数第k个节点
- [leetcode]Reverse Nodes in k-Group 反转以k个节点为一组的链表
- 微软面试题 经典测试(第一组)
- 一组SQL面试题
- leetCode 25.Reverse Nodes in k-Group (以k个节点为一组反转链表) 解题思路和方法
- 【单链表经典面试题解析二】删除一个无头单链表的非尾节点(不能遍历链表)
- 面试题15:链表中倒数第k个节点
- 面试题15:链表中倒数第K个节点
- 面试题15:单链表中倒数第k个节点
- 面试题15:链表中倒数第k个节点
- 面试题15:链表中倒数第K个节点
- 面试题15 链表中到户第K个节点
- ISAPI_Rewrite3,重定向问号问题
- 使用ClearType调节win8系统字体显示效果
- Easyui 使用datagrid分页 详解 代码
- js区分不同浏览器
- BigDecimal除法报错
- [经典面试题]k节点一组旋转链表
- 缩短Windows7系统“程序未响应”的时间
- 如何得到数组中的最大值
- 关于推送的一些问题
- 一个Activity开启另一额Activity时各生命周期函数调用顺序
- 面向对象语言的五个基本特征
- 分享几个资源库
- ffmpeg——新老接口问题及对照集锦
- 第十六周项目三--用函数指针调用函数