题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

1、遍历链表得到链表的长度length;

2、得到链表的长度是为了获取链表翻转的次数(length / k),循环翻转链表即可。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
  public:
    ListNode* reverseKGroup(ListNode* head, int k) {
	  	//特殊情况处理
        if (k == 1 || head == nullptr || head->next == nullptr)
            return head;
		//设置表头
        ListNode* res = new ListNode(0);
        res->next = head;
        ListNode* pre = res;
        ListNode* cur = head;
        //获取链表长度
        int length = 0;
        ListNode* phead = head;
        while(phead != nullptr) {
            length++;
            phead = phead->next;
        }

        if(k > length) 
            return head;
        else {
		  	//翻转链表
            for(int i = 0; i < length / k; i++) {
                for(int i = 1; i < k; i++) {
                    ListNode* ptemp = cur->next;
                    cur->next = ptemp->next;
                    ptemp->next = pre->next;
                    pre->next = ptemp;
                }
                pre = cur;
                cur = cur->next;
            }
        }
        return res->next;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
我真的会练有氧:1.如果没有实习经验,项目一个太少了 2.项目的需求描述不要写成用xxx实现了xxx。写明具体的需求功能就可以,除非是你想特别突出让面试官问的问题 3.证书就一个4级没必要摆上去,摆上去显得你就只有一个4级 4.技术栈太少了,且比较简略,可以加点分布式,常用的微服务组件,架构设计等等信息 个人意见,不喜勿喷
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务