LeetCode Rotate

Description:

Given a list, rotate the list to the right by k places, where k is non-negative.

Solution:

这道题目还是经典的链表操作题。

首先先让一个标记b走k次。

然后让a和b同时开始走,一直到b走到了链表尾,此时a所在的位置就是进行分割的地方。

注意:这里k有可能比链表的长度还大,所以取模一下会比较好。

import java.util.*;

public class Solution {
	public ListNode rotateRight(ListNode head, int k) {
		if (head == null)
			return null;
		int len = getLength(head);
		k = k % len;

		ListNode gap = head;
		ListNode tail = head;
		for (int i = 0; i < k; i++)
			tail = tail.next;
		if (tail == null)
			return head;
		while (tail.next != null) {
			tail = tail.next;
			gap = gap.next;
		}

		tail.next = head;
		head = gap.next;
		gap.next = null;

		return head;
	}

	int getLength(ListNode head) {
		ListNode t = head;
		int n = 0;
		while (t != null) {
			t = t.next;
			n++;
		}
		return n;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值