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

[题](链表中的节点每k个一组翻转_牛客题霸_牛客网 (nowcoder.com))

  1. 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    /**
    * struct ListNode {
    * int val;
    * struct ListNode *next;
    * };
    */

    class Solution {
    public:
    /**
    *
    * @param head ListNode类
    * @param k int整型
    * @return ListNode类
    */
    ListNode* reverseKGroup(ListNode* head, int k) {
    // write code here
    if (k == 1) {
    return head;
    }
    auto headTem = new ListNode{0};
    headTem->next = head;

    std::vector<ListNode*> vector;
    auto moveNode = head;

    int i = 0;
    while (moveNode != nullptr) {
    vector.push_back(moveNode);
    moveNode = moveNode->next;
    i++;
    vector.back()->next = nullptr;
    if (i % k == 0) {
    std::reverse(vector.begin() + i - k, vector.begin() + i );
    }

    }
    moveNode = headTem;
    for (const auto& item : vector) {
    moveNode->next = item;
    moveNode = item;
    }
    return headTem->next;
    }
    };
  2. 提示

    • 使用reverse函数对vector进行翻转
  3. 理解

    -

  4. 问题

    • 为什么要使用vector

      因为使用链表的操作太过于复杂

    • 33行是为什么?

      使得调试的时候方便看结点,这样就只会显示一个节点

  5. 注意

    • 迭代器的用法,特别是begin(),和end()

    • reverse(迭代器1,迭代器2)函数的用法

      将2之前的反转,并不会包括2


链表中的节点每k个一组翻转
https://tsy244.github.io/2023/04/26/算法/newcoder/链表中的节点每k个一组翻转/
Author
August Rosenberg
Posted on
April 26, 2023
Licensed under