📌  相关文章
📜  通过更改链接对给定链表的元素进行成对交换的 C 程序(1)

📅  最后修改于: 2023-12-03 14:58:06.597000             🧑  作者: Mango

通过更改链接对给定链表的元素进行成对交换的 C 程序

在编写算法时,将链表视为一个基本数据结构是常见的。这个数据结构可以非常有用,可以用来存储各种类型的数据,并且可以方便地进行操作,例如在其中交换元素。

本文将介绍一种通过更改链接对给定链表的元素进行成对交换的 C 程序。

实现

以下是实现该算法的 C 语言代码:

#include <stdio.h>
#include <stdlib.h>

// 自定义链表结构体
struct node {
    int data;
    struct node *next;
};

// 将每两个相邻节点的位置交换
void swapAdjacentNodes(struct node *head) {
    if (head == NULL || head->next == NULL) {
        return;
    }

    struct node *temp = head;
    head = head->next;

    while (temp != NULL && temp->next != NULL) {
        struct node *current = temp->next;
        temp->next = current->next;
        current->next = temp;

        if (temp->next != NULL && temp->next->next != NULL) {
            current->next->next = temp->next->next;
        }

        temp = temp->next;
    }
}

// 创建链表
struct node *createList() {
    struct node *head = NULL;
    struct node *current = NULL;

    int n;
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        int data;
        scanf("%d", &data);

        struct node *temp = (struct node *)malloc(sizeof(struct node));
        temp->data = data;
        temp->next = NULL;

        if (head == NULL) {
            head = temp;
            current = temp;
        } else {
            current->next = temp;
            current = current->next;
        }
    }

    return head;
}

// 打印链表
void printList(struct node *head) {
    struct node *temp = head;

    while (temp != NULL) {
        printf("%d ", temp->data);
        temp = temp->next;
    }

    printf("\n");
}

// 主方法
int main() {
    struct node *head = createList();

    printf("原始链表: ");
    printList(head);

    swapAdjacentNodes(head);

    printf("交换后的链表: ");
    printList(head);

    return 0;
}
解释

该程序的主要步骤是交换链表中的每两个相邻的节点。这是通过更改节点之间的链接来实现的。

首先,检查链表是否为空或者是否只有一个节点。如果是这些情况,直接返回。

接下来,我们重置 head 指向链表的第二个节点。然后,我们遍历链表并交换每个相邻的节点。要交换两个相邻的节点,我们需要更改它们之间的链接。具体来说,我们需要将 temp 指向当前节点,将 current 指向下一个节点,将 temp 的下一个节点设置为 current 的下一个节点,将 current 的下一个节点设置为 temp,将 current 的下下个节点(如果存在)设置为 temp 的下一个节点。

结论

通过更改链接对给定链表的元素进行成对交换可能是非常有用的,特别是当需要在链表中移动元素时。在示例代码中,我们展示了如何使用 C 语言实现这个算法,它可以应用于链表中的任何元素类型。