/**
* 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 || !head->next) return head; //链表为空或只有一个元素直接返回
ListNode* dummy=new ListNode(-1); //哑结点
dummy->next=head;
int length=0; //计算链表长度
ListNode*tmp=dummy;
while(tmp->next){
++length;
tmp=tmp->next;
}
k%=length; //旋转次数取模长度避免大数值的k
while(k>0){
ListNode* p=dummy;
while(p->next->next){ //寻找到倒数第二个节点
p=p->next;
}
ListNode* q=p->next; //最后一个节点
q->next=dummy->next;
dummy->next=q;
p->next=NULL; //倒数第二个节点后继为空
--k;
}
return dummy->next;
}
};
61. 旋转链表
最新推荐文章于 2022-10-16 20:37:07 发布