给你一个链表以及一个
k
,将这个链表从头指针开始每
k
个翻转一下。
思路:从左向右遍历链表,如果栈的大小不等于k,就将结点压入栈中。每当栈的大小达到k时,从栈中依次弹出这些结点,根据弹出的顺序重新联接。
链表元素个数不是k的倍数,最后剩余的不用翻转。
样例
给出链表 1->2->3->4->5
k = 2
, 返回 2->1->4->3->5
k = 3
, 返回 3->2->1->4->5
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
* @param head a ListNode
* @param k an integer
* @return a ListNode
*/
ListNode *reverseKGroup(ListNode *head, int k) {
if(head==NULL||k<2)return head;
int count=0;
stack<int> temp;
ListNode* p1=head;
ListNode* p2=head;
while(p1){
temp.push(p1->val);
count++;
p1=p1->next;
if(count%k==0){
for(int i=0;i<k;i++){
p2->val=temp.top();
temp.pop();
p2=p2->next;
}
}
}
return head;
}
};