由于之前看了牛客网的数据结构和算法的课程知道了左神,现在找到了这本书当作入门书做做吧,虽然书的题解都是java实现的,但好在用c++实现难度不大
第二章 链表问题
题目一:将单链表的每k个节点之间逆序
给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点
方法一:利用栈结构,时间复杂度O(N),空间复杂度O(k)
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if (!head||k<2)
{
return head;
}
//如果没有下面的判断,输入 [1] 2 解答将会错误
int num=0;
ListNode* count=head;
while(count){
num++;
count=count->next;
}
if(k>num){return head;}
stack<ListNode*> stack1;
//这里是变量
ListNode* cur=head,*newhead=nullptr,*pre=nullptr,*next=nullptr;//没有next,根本无法遍历
while (cur)
{
next=cur->next;//为了遍历
stack1.push(cur);
if (stack1.size()=&#