117.info
人生若只如初见

c语言单链表反转代码怎么写

以下是一个简单的C语言单链表反转代码示例:

#include 
#include 

// 定义链表节点结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 添加节点到链表尾部
void append(Node** head_ref, int new_data) {
    // 创建新节点
    Node* new_node = (Node*)malloc(sizeof(Node));
    new_node->data = https://www.yisu.com/ask/new_data;>next = NULL;

    // 如果链表为空,则将新节点设为头节点
    if (*head_ref == NULL) {
        *head_ref = new_node;
        return;
    }

    // 找到链表的最后一个节点
    Node* last_node = *head_ref;
    while (last_node->next != NULL) {
        last_node = last_node->next;
    }

    // 将新节点连接到链表的最后
    last_node->next = new_node;
}

// 反转链表
void reverse(Node** head_ref) {
    Node* prev_node = NULL;
    Node* current_node = *head_ref;
    Node* next_node = NULL;

    while (current_node != NULL) {
        // 保存下一个节点的指针
        next_node = current_node->next;

        // 反转当前节点的指针
        current_node->next = prev_node;

        // 移动指针
        prev_node = current_node;
        current_node = next_node;
    }

    // 将头节点指向反转后的链表
    *head_ref = prev_node;
}

// 打印链表
void printList(Node* node) {
    while (node != NULL) {
        printf("%d ", node->data);
        node = node->next;
    }
    printf("\n");
}

int main() {
    Node* head = NULL;

    // 添加节点到链表
    append(&head, 1);
    append(&head, 2);
    append(&head, 3);
    append(&head, 4);

    // 打印原链表
    printf("Original list: ");
    printList(head);

    // 反转链表
    reverse(&head);

    // 打印反转后的链表
    printf("Reversed list: ");
    printList(head);

    return 0;
}

这段代码首先定义了一个链表节点结构体 Node,包含一个整型数据和一个指向下一个节点的指针。然后,通过 append 函数将节点添加到链表的尾部。接着,通过 reverse 函数将链表反转。最后,通过 printList 函数打印链表。在 main 函数中,创建链表并进行测试。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fee2fAzsLBQNeBFA.html

推荐文章

  • c语言怎么向函数传递数组指针

    在C语言中,可以通过指针的方式向函数传递数组指针。以下是一个示例代码:
    #include void printArray(int* arr, int size) { for (int i = 0; i < size; i+...

  • c语言中怎么把数组的值赋给指针

    在C语言中,可以通过以下两种方式将数组的值赋给指针: 使用数组名作为指针: int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 将数组名arr赋给指针ptr 使...

  • c语言如何实现声音输出

    在C语言中,可以使用音频库来进行声音输出。以下是使用ALSA音频库来实现声音输出的示例代码:
    #include int main() { int err; snd_pcm_t *handle; snd_pcm...

  • c语言字符反序输出怎么实现

    实现C语言字符反序输出的方法有多种。以下是一种简单的实现方式:
    #include #include void reversePrint(char *str) { int length = strlen(str); for (int...

  • golang进程信号怎么处理

    在Go语言中,可以使用os/signal包来处理进程信号。下面是一个处理 SIGINT 和 SIGTERM 信号的示例代码:
    package main import ( "fmt" "os" "os/signal" "sy...

  • golang怎么防止反编译执行

    要防止Golang代码被反编译执行,可以采取以下措施: 使用代码混淆:通过修改变量名、函数名等代码标识符,增加代码的复杂性,使反编译者难以理解代码逻辑。

  • java怎么防止反编译加密

    在Java中防止反编译加密的方法可以通过以下几种方式来实现: 使用混淆技术:通过重命名变量、方法和类名,删除无用的代码和注释,以及添加无效的代码等方式,增加...

  • golang内存分配管理的方法是什么

    Go语言中的内存分配管理主要有两个方法: 垃圾回收:Go语言使用了自动垃圾回收(Garbage Collection)来管理内存的分配和回收。垃圾回收器会自动追踪和回收不再使...