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

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

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

本文介绍一段用于在给定大小的组中反转链表的 C 程序,适用于第 1 组。以下是详细介绍:

程序简介

这个程序是用来反转链表,可以在给定大小的组中反转整个链表。如果链表的长度不是组大小的倍数,则最后一组不需要反转。本程序使用头插法,一次反转一个元素,并将其插入到新的链表的头部。

程序代码
/* Node structure */
struct ListNode {
    int val;
    struct ListNode *next;
};

/* Reverse a group of size k of linked list */
struct ListNode* reverseKGroup(struct ListNode* head, int k) {
    if (head == NULL || k == 1) return head;

    struct ListNode dummy;
    dummy.next = head;

    struct ListNode *prev = &dummy, *cur = head;
    int cnt = 0;

    while (cur != NULL) {
        cnt++;
        if (cnt % k == 0) {
            /* Reverse list */
            prev = reverseList(prev, cur->next);
            cur = prev->next;
        } else {
            cur = cur->next;
        }
    }

    return dummy.next;
}

/* Reverse list from start to end(exclusive) */
struct ListNode* reverseList(struct ListNode* start, struct ListNode* end) {
    struct ListNode *prev = start, *cur = start->next, *next;
    struct ListNode *first = start->next;

    while (cur != end) {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }

    first->next = end;
    start->next = prev;

    return first;
}
程序使用说明

这个程序可以在你的代码中调用 reverseKGroup 函数,并传递指向链表头节点的指针和反转组大小的整数。函数将返回反转过组之后的链表头节点指针。

总结

本文介绍了一段 C 代码,用于在给定大小的组中反转链表。代码通过头插法实现,反转一个小组的元素,并将其插入到新的链表头部。如果链表的长度不是组大小的倍数,则最后一组不需要反转。如有需要,您可以修改代码以适应自己的需求。