给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
非常常规的题目吧!
ListNode* rotateRight(ListNode* head, int k) {
if(nullptr == head)
return nullptr;
int length = 1;
ListNode *p1 = head;
while(nullptr != p1->next) {
p1 = p1->next;
length++;
}
int n = k % length;
if(0 == n) return head;
p1->next = head;
p1 = head;
for(int i = 1; i < length - n; i++)
p1 = p1->next;
ListNode *p2 = p1->next;
p1->next = nullptr;
return p2;
}

本文深入探讨了链表旋转算法的实现细节,提供了一种高效的方法来旋转链表中的节点,通过将链表尾部与头部相连,再进行断点处理,实现了链表的k位右移。该算法不仅适用于各种链表结构,而且在时间和空间复杂度上都有良好的表现。
1035

被折叠的 条评论
为什么被折叠?



