
就是将一段链表分成2段,把第一段接在第二段的后面
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head) return NULL;
if(!head->next) return head;
//得到链表长度
ListNode* rear=head;
int length=1;
for(;rear->next;++length)
rear=rear->next;
//顺便将链表连成环
rear->next=head;
//找到第一段的结尾
ListNode* rear2=head;
for(int i=0;i<length-k%length-1;++i)
rear2=rear2->next;
//找到第二段的开头
ListNode* head2=rear2->next;
rear2->next=NULL;
return head2;
}
};
本文详细解析了链表旋转算法的实现过程,通过将链表分为两段并重新连接,达到旋转的效果。文章提供了完整的代码示例,展示了如何计算链表长度、形成闭环以及确定新的头部节点。

462

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



