您的位置:首页 > 其它

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
1->2->3->4->5->NULL
and 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;

}


注意:在做的过程中考虑全面是必须的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: