leetcode(61) 旋转链表
程序员文章站
2022-05-06 09:42:50
...
旋转链表
给定一个链表,旋转链表,将每个节点向右移动k个位置,其中k是非负数。
思路
设链表长度为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;
}
};
上一篇: leetcode61.旋转链表
下一篇: mysql replication 优化