📌  相关文章
📜  用于在给定大小的组中反转链表的 C++ 程序 – 第 1 组(1)

📅  最后修改于: 2023-12-03 15:27:10.762000             🧑  作者: Mango

用于在给定大小的组中反转链表的 C++ 程序 – 第 1 组

这是一个用于在给定大小的组中反转链表的 C++程序。它非常实用,可以用来处理各种链表操作。以下是程序的细节。

程序介绍

该程序使用了迭代的方法来反转链表。它首先将链表分成若干组,每组包含指定数量的节点。然后,程序通过遍历每个组中的节点,反转它们的指针,从而实现反转整个链表的效果。

程序实现

以下是程序的实现细节:

#include <iostream>

using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    ListNode *reverseKGroup(ListNode *head, int k) {
        if (!head || k < 2){
            return head;
        }
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        ListNode *cur = dummy, *tail = dummy;
        while (true){
            int count = k;
            while (count && tail){
                count--;
                tail = tail->next;
            }
            if (!tail){
                break;
            }
            head = cur->next;
            while (cur->next != tail){
                ListNode *move = cur->next;
                cur->next = move->next;
                move->next = tail->next;
                tail->next = move;
            }
            cur = head;
            tail = head;
        }
        return dummy->next;
    }
};

int main()
{
    ListNode *one = new ListNode(1);
    ListNode *two = new ListNode(2);
    ListNode *three = new ListNode(3);
    ListNode *four = new ListNode(4);
    ListNode *five = new ListNode(5);
    one->next = two;
    two->next = three;
    three->next = four;
    four->next = five;
    Solution s;
    ListNode *newHead = s.reverseKGroup(one, 2);
    while (newHead){
        cout << newHead->val << " ";
        newHead = newHead->next;
    }
    cout << endl;
    return 0;
}
程序演示

我们假设链表中的节点值为 1, 2, 3, 4, 5,将其分为大小为 2 的组。使用我们的程序反转每个组,得到反转后的链表为 2, 1, 4, 3, 5。

总结

该程序是非常实用的链表处理工具,在处理链表时可以大大减少程序的开发难度和复杂度。如果您在工作中需要处理链表,那么这个程序一定会给您带来很大的帮助。