您的位置:首页 > 其它

( Leetcode 61 ) Rotate List

2016-05-03 20:07 525 查看
题目:Rotate List

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
.
解题思路:
1. 首先求的链表的长度, 如果k值超过了链表长度,将其与链表长度取模

2. 接下来设置两个指针p和q,首先将p移动k个结点,之后p和q同时移动

3. 接下来就是拼接了,不详细说了,具体代码里面有注释

具体Java代码见下面:

public class Solution {
public static ListNode rotateRight(ListNode head, int k) {
if( k <= 0 || head == null ){
return head;
}
ListNode p = head;
int len = 0;
while( p != null ){
if( p.next == null ){
pre = p;
}
p = p.next;
len++;
}
//如果k超过链表长度,取模
k = k % len;
p = head;
for( int i =1; i <= k; ++i ){
p = p.next;
}
/********************
下面当循环结束的时候p指向最后一个节点
q指向倒是第k+1个结点,例如链表1 2 3 4 5 ,k = 2时
循环结束 p = 5, q = 3
*/
ListNode q = head;
while( p.next != null ){
q = q.next;
p = p.next;
}
//此时将后半段接到head前面,前半段最后一个节点指针赋值null
//重新更改head节点指向
p.next = head;
head = q.next;
q.next = null;

return head;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: