欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode(61) 旋转链表

程序员文章站 2022-05-06 09:42:50
...

旋转链表

给定一个链表,旋转链表,将每个节点向右移动k个位置,其中k是非负数。
leetcode(61) 旋转链表

思路

设链表长度为i,利用两个人节点指针p,q,令p=q=head,p先走(k%i)步,然后两个指针同时走,当p->next为空时停止循环,则q->next就是旋转之后的头结点。

c++代码如下

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
       if(head==NULL||head->next==NULL)  return head;
        ListNode *p=head,*q=head,*m=head;
        int i=0,j=1;
        while(m->next!=NULL)
        {
            m=m->next;
            j++;
        }
        while(i<(k%j))
        {
            p=p->next;
            i++;
        }
        while(p->next!=NULL)
        {
            p=p->next;
            q=q->next;
        }
        p->next=head;
        ListNode *n=new ListNode(0);
        n->next=q->next;
        q->next=NULL;
        return n->next;
    }
};
相关标签: leetcode