码迷,mamicode.com
首页 > 其他好文 > 详细

25. K 个一组翻转链表

时间:2020-01-12 11:18:39      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:直接   ble   说明   难度   完成   返回   而不是   使用   return   

25. K 个一组翻转链表

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/

难度 完成日期 耗时 提交次数
困难 2020-1-12 1小时 1

问题描述

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明 :

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解题思路

普通方法

ListNode* reverseKGroup(ListNode* head, int k) {
    ListNode *_head = head;
    int length = 0;
    while (head != nullptr) {
        length++;
        head = head->next;
    }
    head = _head;
    int values[k];
    ListNode *ans = new ListNode(0);
    ListNode *l = ans;
    for (int i = 0; i < length / k; i++) {
        ListNode *start = head;
        for (int j = 0; j < k; j++) {
            values[j] = head->val;
            head = head->next;
        }
        for (int j = 0; j < k; j++) {
            ListNode *temp = new ListNode(values[k - j - 1]);
            ans->next = temp;
            ans = ans->next;
        }
    }
    if (head != nullptr) {
        ans->next = head;
    }
    return l->next;
}

刚开始的时候考虑过和 24 题一样的方法,修改是否继续进行下一轮反转的条件,并不能成功,于是考虑使用数组存储整个待反转部分的数值,再直接从数组中取值而不是靠指针移动取值。

25. K 个一组翻转链表

标签:直接   ble   说明   难度   完成   返回   而不是   使用   return   

原文地址:https://www.cnblogs.com/kennyoooo/p/12182043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!