给定一个单链表,从后向前翻转K个节点,K是一个非负整数;
例如:1->2->3->4->5, k = 2;
则返回:4->5->1->2->3
分析:先遍历一遍,得出链表的长度len,注意K可能大于len,因此令k = k % len;将尾节点next指针指向首节点,形成一个环,接着往后跑len - k步,从这里断开,就是所要求的结果了。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head ==nullptr || k ==0) return head;
int len = 1;
ListNode *p = head;
while(p->next){
len ++;
p = p->next;//
}
k = len - k % len;
p->next = head;
for(int step = 0;step < k;step++){
p = p->next;
}
head = p->next;
p->next = nullptr;
return head;
}
};