解题思路
指针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;}}
};