LeetCode61——Rotate List

本文提供了一种解决LeetCode第61题“Rotate List”的方法,通过构建循环链表并调整指针位置来实现链表旋转。文章详细介绍了算法流程及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode61——Rotate List

简单的链表操作。维护head和r指针,r初始指向链表末尾,并且r-next=head;

首尾相接,再根据给定K移动特定指针。

比如说,链表长度len=5,那么当k为1时,head指针向后移动len-k=4步,而r指针也移动同样步骤,这样始终有r->next==head;


最后将循环链表拆开为单链表即可。

注:根据提交经验,k会给很大,这时我们让k对链表长度取模即可。

代码:

class Solution {
public:
	ListNode* rotateRight(ListNode* head, int k) {
		if (k == 0 || head == NULL)
			return head;
		ListNode*r = head;
		int count = 1;
		while (r->next)
		{
			count++;//链表长度
			r = r->next;
		}
		k = k%count;//处理k
		if (k==0)
		{
			return head;
		}
		r->next = head;//循环链表
		int move = count - k;
		while (move--)
		{
			head = head->next;
			r = r->next;
		}
		r->next = NULL;//拆开
		return head;
	}
};


后记:

今天做了11题,累坏了。。。写完博客洗洗睡了、、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值