46.Rotate List
2015-10-26 22:58
302 查看
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given
return
分析:题目要求将给定的链表按照向右走k步。
Step1:让p先比q走k步;
Step2:p和q一起走,直到p走到末尾元素,则q为新的末尾元素;
Step3:重新定头结点。
注意:在做的过程中考虑全面是必须的。
For example:
Given
1->2->3->4->5->NULLand k =
2,
return
4->5->1->2->3->NULL.
分析:题目要求将给定的链表按照向右走k步。
Step1:让p先比q走k步;
Step2:p和q一起走,直到p走到末尾元素,则q为新的末尾元素;
Step3:重新定头结点。
/* * 给一个链表和让这个链表向右走的步数k。 * 定义两个节点p和q,让p在q前面k步,则p到末尾元素的时候,q刚好是新的末尾元素。 * */ public ListNode rotateRight(ListNode head, int k) { <span style="white-space:pre"> </span>ListNode p = head; ListNode q = head; if(head == null || head.next == null||k<=0){ return head; } /*Step1:让p先比q走k步*/ int i=1; while(i<=k){ p = p.next; if(p == null){//注意这个地方k有可能大于链表的长度。那样的话就将k转化为小于链表长度的数。p指向head p = head; System.out.println("k = "+k); System.out.println("i = "+i); k=k%i; System.out.println("k = "+k); i=0;//在这个地方i设为0,但是下面很快就i++了。 } i++; } /*Step2:p和q一起走,直到p走到末尾元素,则q为新的末尾元素*/ while(p.next!=null){ p=p.next; q=q.next; } /*Step3:重新定头结点*/ p.next = head; head = q.next; q.next = null;//一定要注意让新的末尾元素指定null return head; }
注意:在做的过程中考虑全面是必须的。
相关文章推荐
- 题目
- [BZOJ1641][Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- Scala学习笔记<基本数据结构>
- iOS启动时如何添加引导页面 小demo
- Axis,axis2,Xfire以及cxf对比
- 存储器层次结构
- bzoj3433【Usaco2014 Jan】Recording the Moolympicx
- ubutu安装mpich3遇到的问题
- Could not find developer disk image
- 录制后没有userSession
- codeforces 589 I - Lottery(水)
- 即时聊天IM之四 Android客户端IM帮助类编写
- Android之React native的介绍和入门指南
- 面试---两个栈实现一个队列
- FFmpeg Android平台编译与使用
- python学习笔记(四)dict和set类型
- poj 2566
- 2015年10月23日作业
- hadoop2.5.1+ubantu14.04伪分布式配置及问题解答
- bzoj3432【Usaco2014 Jan】Cross Country Skiing