面试中常见链表问题3:旋转链表
2016-06-06 10:18
405 查看
给定一个单链表和一个k值,把链表向右旋转k步,比如说1->2->3->4->5->NULL和k = 2,则返回4->5->1->2->3->NULL。
解析:(1)把链表分割成两部分,前半部的长度为len-k,后半部分的长度为k,其中len为链表测长度。(2)把后一部分链表的尾指针指向前一部分链表的头指针。返回后一部分的首指针即可。
ListNode* rotateRight(ListNode* head, int k) { if(head == NULL || head->next == NULL) return head; //链表长度 int len = 1; ListNode *p = head; while(p->next != NULL) { len++; p = p->next; } //尾指针 ListNode *tail = p; k = k % len; //把链表分割成两部分,前部分长度 int size = len - k; if(size == 0 || size == len) return head; p = head; int index = 1; //获得前半部的尾指针 while(p->next != NULL && index < size) { p = p->next; index++; } ListNode *tmp = p->next; p->next = NULL; tail->next = head; head = tmp; return head; }
相关文章推荐
- 面试题18:树的子结构
- 程序员最美情人节礼物:JS渲染的3D玫瑰
- 面试中常见链表问题2:合并k个有序链表
- IOS面试资料
- 面试中常见链表问题1:合并两个有序链表
- JAVA_基础面试题
- Android面试题二
- 程序员批注《语言学教程》——第三章 从语素到短语
- 脱颖而出! 面试英语的一些小技巧
- 程序员常会用到的软件有哪些
- js操作符类型转换大全(前端面试题之操作符)
- 总结前端面试过程中最容易出现的问题
- Freelancer自由工作离我们还有多远?
- 黑马程序员——Java基础---面向对象之多态抽象类接口
- 黑马程序员——Java基础---面向对象代码块和继承和this和super和重写和重载和final
- 面试题17:合并两个排序的链表
- Hibernate常见面试知识点
- JAVA程序员必看的15本书
- 软件工程师的职业规划
- 面试小问题