给你一个链表,每 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; } };