题解 | #链表中的节点每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++)

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:33
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务