Drehen Sie die verknüpfte Liste: Geben Sie den Kopfknoten der verknüpften Liste an, drehen Sie die verknüpfte Liste und verschieben Sie jeden Knoten der verknüpften Liste um k Positionen nach rechts.

Frage: Drehen Sie bei gegebenem Kopfknoten einer verknüpften Liste die verknüpfte Liste und verschieben Sie jeden Knoten der verknüpften Liste um k Positionen nach rechts.

Beispiel:

Eingabe: Kopf = [1,2,3,4,5], k = 2
Ausgabe: [4,5,1,2,3]

Algorithmus: Behandeln Sie die zu drehende verknüpfte Liste als geschlossene Schleife. Das Verschieben von k Positionen entspricht dem Ändern des Kopfknotens durch k-maliges Drehen. (Hier kann die geschlossene Schleife als Drehung einer Uhr betrachtet werden, und der Kopfknoten wird als 12 Uhr betrachtet.)

1. Bilden Sie eine verknüpfte Liste zu einem Ring -> verbinden Sie das Ende mit dem Ende, dh der Endknoten zeigt auf den Kopfknoten.

2. Finden Sie den gedrehten Endknoten (positive Zahl nk%n) -> Da k ≥ n möglich ist, ist k%n erforderlich. Besondere Erinnerung: Wenn k ein ganzzahliges Vielfaches von n ist, ist die neue verknüpfte Liste dieselbe wie die Ursprüngliche verknüpfte Liste, keine Rotation erforderlich

3. Wechseln Sie den neuen Kopfknoten nach der Drehung und schneiden Sie den Ring ab (trennen Sie die Kopf- und Schwanzverbindungen).

 

 

//时间复杂度O(n)
//空间复杂度O(1)
class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if(!head || !head->next || k==0) return head;
       
        int n=1;//统计结点个数n       
        ListNode* p=head;
        while(p->next)//找到尾节点并统计结点个数
        {
            p=p->next;
            n++;
        }

        int tail=n-k%n;
        if(tail==n) return head;//k如果是n的整数倍,旋转后链表不变(注意:应该先判断k,再进行闭环处理,如若k是n的整数倍,则不需要闭环处理,直接返回原链表)

        //构成环——>首尾结点相连
        p->next=head;

        //找到旋转后,新的尾节点
        while(tail--)
        {
            p=p->next;
        }

        //更改旋转后新的头结点,并进行切割环(断开首尾连接)
        head=p->next;
        p->next=nullptr;

Acho que você gosta

Origin blog.csdn.net/weixin_53472334/article/details/132169378
Recomendado
Clasificación