解题思路
指针p先走k步,若p为空,则从头开始继续走。之后让q指针从头开始与p同时往后走(当p->next不为空的时候),若q->next为空的时候,则链表不需要倒转,直接返回原链表,否则,将链表进行倒转,q->next到末尾作为新链表的前半部分,将原链表的头部到q作为新链表的后半部分,直接连接到p->next。
代码
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if(head == NULL)
return NULL;
if(k == 0)
return head;
ListNode *first = new ListNode(0);
ListNode *p = head;
ListNode *q = head;
while(k--){
p = p->next;
if(p == NULL)
p = head;
}
while(p->next){
p = p->next;
q = q->next;
}
if(q->next == NULL)
return head;
else{
first->next = q->next;
q->next = NULL;
p->next = head;
return first->next;
}
}
};