您的位置:首页 > 其它

LeetCode----- 61. Rotate List

2017-10-20 21:31 525 查看
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个位置,k为非负数。

解题思路:先判断链表结点个数,然后将单链表构成循环单链表,然后遍历旋转的次数,寻找到头结点。

public class RotateList {
public static  ListNode rotateRight(ListNode head, int k) {
if(head == null || head.next == null) {
return head;
}
int length = 0;
ListNode result = new ListNode(0);
result.next = head;
ListNode node = result;
while(node.next!=null) {
length++;
node = node.next;
}
node.next = head;//构成循环链表
for(int i=0;i<length-k%length;i++) {
node = node.next;
}
result.next = node.next;
node.next = null;
return result.next;
}

public static void main(String[] args) {
ListNode l10 = new ListNode(1);
ListNode l11 = new ListNode(2);
ListNode l12 = new ListNode(3);
ListNode l13 = new ListNode(4);
ListNode l14 = new ListNode(5);
ListNode l15 = new ListNode(6);
l10.next = l11;
l11.next = l12;
l12.next = l13;
l13.next = l14;
l14.next = l15;
l15.next = null;

ListNode node =rotateRight(l10,7);
while(node != null) {
if(node.next == null) {
System.out.println(node.val);
}else{
System.out.print(node.val +"->");
}
node = node.next;
}
}
}

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