LeetCode 61 Rotate List

本文介绍了一种链表操作算法——链表旋转。该算法通过形成一个环形链表并精确地断开连接来实现将链表的后k个元素移动到链表的前面。文章详细解释了算法的实现步骤,并提供了完整的代码示例。

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 个元素至列表最前面。

思路:

  1. 先找到最后元素 lastOne ,并计算链表长度,同时最后一个元素指向头节点,形成一个环。
  2. 从head节点开始,往后走到第 len - k % len,即走到了旋转后列表新的最后元素 newLastOne,新的环链表在newLastOne之后断开。
  3. 断开的链表即是反转后的新链表。
	public ListNode rotateRight(ListNode head, int k) {
		if (head == null || k == 0) return head;
		ListNode p = head;
		int len = 1;
		while (p.next != null) {
			len++;
			p = p.next;
		}
		p.next = head;//form a cycle List
		for (k = len - k % len; k > 0; k--) p = p.next;
		head = p.next;//break the circle at the (len - k % len)th ListNode 
		p.next = null;
		return head;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值