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

溫馨提示×

C語言反轉列表的方法是什么

小億
95
2023-10-26 20:14:31
欄目: 編程語言

在C語言中,可以通過指針操作來反轉一個鏈表。

首先,需要定義一個結構體表示鏈表的節點,結構體中包含存儲的值(可以是任何類型)和一個指向下一個節點的指針。

struct Node {
    int data;
    struct Node* next;
};

然后,可以編寫一個函數來反轉鏈表。該函數需要接收鏈表的頭節點作為參數,然后通過指針操作重新排列鏈表節點的順序。

struct Node* reverseList(struct Node* head) {
    struct Node* prev = NULL;
    struct Node* current = head;
    struct Node* next = NULL;
    
    while (current != NULL) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    
    head = prev;
    
    return head;
}

這個函數使用了三個指針:prev用于保存當前節點的前一個節點,current用于保存當前節點,next用于保存當前節點的下一個節點。在循環中,首先將next指針指向當前節點的下一個節點,然后將當前節點的next指針指向前一個節點,接著將prev指針指向當前節點,將current指針指向next節點。最后,將頭節點指向反轉后的鏈表的最后一個節點。

以下是一個使用反轉鏈表函數的例子:

int main() {
    struct Node* head = NULL;
    struct Node* second = NULL;
    struct Node* third = NULL;

    // 創建鏈表
    head = (struct Node*)malloc(sizeof(struct Node));
    second = (struct Node*)malloc(sizeof(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;

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

    // 打印反轉后的鏈表
    struct Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }

    return 0;
}

輸出結果為:3 2 1,表示鏈表已成功反轉。

0
启东市| 马关县| 石楼县| 巢湖市| 东阿县| 长宁区| 九龙城区| 正蓝旗| 塘沽区| 遵义县| 石城县| 柞水县| 丹棱县| 西青区| 扎兰屯市| 定结县| 淮安市| 莲花县| 惠州市| 哈巴河县| 威海市| 南岸区| 陇川县| 清河县| 彰化市| 崇礼县| 精河县| 康保县| 贺州市| 溆浦县| 内黄县| 富阳市| 红河县| 丽水市| 康乐县| 汨罗市| 宁海县| 雷州市| 正宁县| 玉山县| 太白县|