给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
题目描述
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例:
给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5
题解:
翻转考虑用栈进行实现,每k个进行翻转。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
//用于指向翻转后对应的第一个节点,这样我就可以指向下一个结点
ListNode* tmp_head = new ListNode(0);
tmp_head->next = head;
ListNode* tmp = tmp_head;
//存放链表节点
stack<ListNode* > s;
//用于记录是否到第k个节点了
int i=0;
while(head!=NULL)
{
s.push(head);
head = head->next;
i++;
//开始处理,依次弹出栈中节点
if(i%k==0)
{
i=0;
while(!s.empty())
{
tmp->next = s.top();
tmp = tmp->next;
s.pop();
}
//指向下一个原链表节点,这样当不满足k个,就不用操作了
tmp->next = head;
}
}
return tmp_head->next;
}
};
京公网安备 11010502036488号