Leetcode刷题笔记题解(C++):25. K 个一组翻转链表
2023-12-14 13:13:36
思路:利用栈的特性,K个节点压入栈中依次弹出组成新的链表,不够K个节点则保持不变
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
#include <stack>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
stack<ListNode*> sk;//用来保存链表节点
ListNode* temp = head;
ListNode* ret = new ListNode(-1);
ListNode* ret1 = ret;
//按k个节点一次一次去遍历链表
while(1){
int count = k;
//K个节点之内依次push入栈中
while(count&&temp){
sk.push(temp);
temp = temp->next;
count--;
}
//如果push完了还不够数量则该次不需要反转链表反转保持原型进行链接,从而跳出循环
if(count){
//下一阶段的第一个节点
ret1->next = head;//这句不能省略的原因是如果k大于链表的长度,没有这句话return结果为空,但是应该是该链表
break;
}
//如果够数量则从栈中弹出加入结果链表中
while(!sk.empty()){
ret1->next = sk.top();
sk.pop();
ret1 = ret1->next;
}
//结果链表的下一节点指向后面的链表
ret1->next = temp;
head = temp;
}
return ret->next;
}
};
文章来源:https://blog.csdn.net/qq_27524749/article/details/134916532
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!