中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c語言單向鏈表怎么反轉

小億
86
2024-01-27 18:23:26
欄目: 編程語言

要反轉一個單向鏈表,可以使用三個指針分別指向當前節點、前一個節點和后一個節點。然后,通過修改指針的指向來實現鏈表的反轉。

具體步驟如下:

  1. 初始化三個指針:當前節點指針cur指向鏈表的頭節點,前一個節點指針prev為NULL,后一個節點指針next為NULL。
  2. 遍歷鏈表,直到當前節點指針cur為NULL。
  3. 在遍歷過程中,先將后一個節點指針next指向當前節點cur的下一個節點。
  4. 然后將當前節點指針cur的下一個節點指向前一個節點prev。
  5. 然后將前一個節點指針prev指向當前節點指針cur。
  6. 最后將當前節點指針cur指向后一個節點指針next。
  7. 重復步驟2-6,直到遍歷完整個鏈表。
  8. 最后,將鏈表的頭節點指針指向前一個節點指針prev,即可完成鏈表的反轉。

下面是一個示例代碼實現:

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

// 定義鏈表節點結構體
struct Node {
    int data;
    struct Node* next;
};

// 反轉鏈表函數
struct Node* reverseLinkedList(struct Node* head) {
    struct Node* cur = head;
    struct Node* prev = NULL;
    struct Node* next = NULL;

    while (cur != NULL) {
        next = cur->next; // 暫存當前節點的下一個節點
        cur->next = prev; // 將當前節點的下一個節點指向前一個節點,實現翻轉
        prev = cur; // 前一個節點指針后移
        cur = next; // 當前節點指針后移
    }

    head = prev; // 將鏈表頭節點指向翻轉后的鏈表的頭節點

    return head;
}

// 打印鏈表函數
void printLinkedList(struct Node* head) {
    struct Node* cur = head;

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

    printf("\n");
}

int main() {
    // 創建鏈表
    struct Node* head = (struct Node*)malloc(sizeof(struct Node));
    struct Node* second = (struct Node*)malloc(sizeof(struct Node));
    struct Node* third = (struct Node*)malloc(sizeof(struct Node));

    head->data = 1;
    head->next = second;

    second->data = 2;
    second->next = third;

    third->data = 3;
    third->next = NULL;

    printf("原始鏈表:");
    printLinkedList(head);

    // 反轉鏈表
    head = reverseLinkedList(head);

    printf("反轉后的鏈表:");
    printLinkedList(head);

    // 釋放內存
    free(head);
    free(second);
    free(third);

    return 0;
}

以上代碼創建了一個包含3個節點的鏈表,然后調用reverseLinkedList函數來反轉鏈表,并使用printLinkedList函數打印結果。最后釋放動態分配的內存。

輸出結果如下:

原始鏈表:1 2 3 
反轉后的鏈表:3 2 1 

0
剑阁县| 古交市| 商城县| 伊金霍洛旗| 获嘉县| 平泉县| 内黄县| 黑龙江省| 天气| 封丘县| 若羌县| 绍兴市| 聂荣县| 墨竹工卡县| 濉溪县| 略阳县| 武城县| 七台河市| 蒙山县| 永寿县| 长子县| 黔南| 波密县| 黑山县| 北京市| 班玛县| 佛教| 舞钢市| 武强县| 宣化县| 田东县| 宝清县| 龙游县| 静海县| 当雄县| 灯塔市| 新蔡县| 天等县| 友谊县| 双牌县| 扎赉特旗|