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

溫馨提示×

C語言鏈表逆序排列的算法有哪些

小樊
85
2024-08-27 04:48:29
欄目: 編程語言

在C語言中,實現鏈表逆序排列的方法有多種。以下是兩種常見的算法:

  1. 迭代法(Iterative)

迭代法的基本思想是使用三個指針,分別指向當前節點、前一個節點和后一個節點。通過遍歷鏈表,將當前節點的next指針指向前一個節點,然后更新三個指針的位置。最后,將原鏈表的頭節點指向新的頭節點。

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

Node* reverseList(Node* head) {
    Node* prev = NULL;
    Node* current = head;
    Node* next = NULL;

    while (current != NULL) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }

    return prev;
}
  1. 遞歸法(Recursive)

遞歸法的基本思想是先遞歸地反轉鏈表的子鏈表,然后將當前節點添加到反轉后的子鏈表的末尾。

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

Node* reverseListHelper(Node* node, Node* prev) {
    if (node == NULL) {
        return prev;
    }

    Node* next = node->next;
    node->next = prev;
    return reverseListHelper(next, node);
}

Node* reverseList(Node* head) {
    return reverseListHelper(head, NULL);
}

這兩種方法都可以實現鏈表的逆序排列。迭代法的時間復雜度為O(n),空間復雜度為O(1);遞歸法的時間復雜度為O(n),空間復雜度為O(n)(遞歸調用棧的深度為n)。根據實際需求和資源限制,可以選擇合適的算法來實現鏈表的逆序排列。

0
清镇市| 建宁县| 汤阴县| 江山市| 康定县| 峨眉山市| 沭阳县| 西华县| 吴堡县| 香河县| 资源县| 定州市| 海兴县| 福清市| 宜章县| 云南省| 正宁县| 长沙市| 余干县| 泗阳县| 顺平县| 深圳市| 鄂伦春自治旗| 海伦市| 阿勒泰市| 龙山县| 勃利县| 陇川县| 东港市| 张家界市| 镇原县| 栾川县| 大竹县| 太仓市| 上思县| 桑日县| 门头沟区| 新干县| 柘城县| 双峰县| 原阳县|