61. 旋转链表

61. 旋转链表

2021年3月27日

将链表每个节点向右移动 \(k\)个位置

首先,假设链表长度为\(len\)

  1. \(k<len\)时,相当于后\(k\)位移到前面
  2. \(k>len\)时,令\(k\%=len\),然后再移动即可
class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if(head==nullptr)
            return head;
        int len=0;
        ListNode* tmp=nullptr;
        for(ListNode* p=head;p;p=p->next){
            len++;
            if(p->next==nullptr)
                tmp=p;
        }
        k%=len;
        if(k==0)
            return head;
        int i=0;
        for(ListNode* p=head;p;p=p->next,i++){
            if(i==len-k-1){
                tmp->next=head;
                head=p->next;
                p->next=nullptr;
                break;
            }
        }
        return head;
    }
};
posted @ 2023-11-30 15:50  CrossAutomaton  阅读(2)  评论(0编辑  收藏  举报