91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言單向鏈表逆序如何實現

小億
81
2024-10-11 17:38:19
欄目: 編程語言

在C語言中,要實現單向鏈表的逆序,我們需要改變鏈表中每個節點的next指針,使其指向前一個節點。以下是實現這一功能的步驟:

  1. 初始化三個指針:prev、curr和next。其中,prev用于保存當前節點的前一個節點,初始化為NULL;curr用于遍歷鏈表,初始化為鏈表的頭節點;next用于保存當前節點的下一個節點,初始化為NULL。
  2. 遍歷鏈表,對于每個節點,先保存其下一個節點到next指針,然后將當前節點的next指針指向前一個節點prev。接著,將prev指針移動到curr指針,將curr指針移動到next指針。重復這個過程,直到curr指針變為NULL,即鏈表遍歷完成。
  3. 在遍歷過程中,需要注意更新鏈表的頭節點。當curr指針變為NULL時,prev指針指向的是原鏈表的最后一個節點,即新鏈表的頭節點。因此,需要將鏈表的頭節點更新為prev指針。

以下是具體的C語言代碼實現:

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

// 定義鏈表節點結構體
typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

// 創建新節點的函數
ListNode* createNode(int val) {
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    newNode->val = val;
    newNode->next = NULL;
    return newNode;
}

// 逆序鏈表的函數
void reverseList(ListNode** head) {
    ListNode* prev = NULL;
    ListNode* curr = *head;
    ListNode* next = NULL;

    while (curr != NULL) {
        // 保存當前節點的下一個節點
        next = curr->next;
        // 將當前節點的next指針指向前一個節點
        curr->next = prev;
        // 更新prev和curr指針
        prev = curr;
        curr = next;
    }

    // 更新鏈表的頭節點
    *head = prev;
}

// 打印鏈表的函數
void printList(ListNode* head) {
    ListNode* curr = head;
    while (curr != NULL) {
        printf("%d -> ", curr->val);
        curr = curr->next;
    }
    printf("NULL\n");
}

int main() {
    // 創建鏈表:1 -> 2 -> 3 -> 4 -> 5 -> NULL
    ListNode* head = createNode(1);
    head->next = createNode(2);
    head->next->next = createNode(3);
    head->next->next->next = createNode(4);
    head->next->next->next->next = createNode(5);

    printf("原鏈表:\n");
    printList(head);

    // 逆序鏈表
    reverseList(&head);

    printf("逆序后的鏈表:\n");
    printList(head);

    return 0;
}

運行上述代碼,輸出結果為:

原鏈表:
1 -> 2 -> 3 -> 4 -> 5 -> NULL
逆序后的鏈表:
5 -> 4 -> 3 -> 2 -> 1 -> NULL

0
铜川市| 香河县| 同德县| 郑州市| 阿拉尔市| 武定县| 增城市| 乾安县| 乌审旗| 弥勒县| 乳山市| 屏东县| 阳新县| 莫力| 屯留县| 华宁县| 温泉县| 延吉市| 化德县| 依兰县| 岳西县| 枞阳县| 金门县| 南京市| 嫩江县| 鲜城| 阿坝| 雷州市| 乌拉特中旗| 阿克苏市| 文昌市| 饶平县| 二连浩特市| 抚宁县| 班玛县| 江山市| 庆城县| 嫩江县| 海丰县| 兴仁县| 乾安县|