首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言鏈表最大值查找:FindMax 函數邏輯解析

     編輯:C 語言問答

單鏈表遍歷求最大值

函數簽名:


int FindMax(struct IntNode *f)  // f 為鏈表頭指針

結構體定義


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

函數邏輯逐行解析


int FindMax(struct IntNode *f) {
    if (!f) {  // 空鏈表檢查
        printf("單鏈表為空\n");
        exit(1);
    }
    int x = f->data;  // 初始最大值為首節點數據
    f = f->next;      // 移至第二個節點
    while (f) {       // 遍歷剩餘節點
        if (f->data > x) x = f->data;  // 更新最大值
        f = f->next;
    }
    return x;  // 返回最大值
}

時空複雜度

  • 時間:O(n),單次遍歷
  • 空間:O(1),僅用常數額外變量

邊界情況處理

改進建議

  • 返回狀態碼而非 exit(),讓調用者決定錯誤處理
  • 用 const 修飾參數:const struct IntNode *f
  • 若鏈表極長,考慮並行化分段求最大值再歸併

擴展:同時返回最大值節點指針


struct IntNode* FindMaxNode(struct IntNode *head) {
    if (!head) return NULL;
    struct IntNode *maxNode = head;
    for (struct IntNode *p = head->next; p; p = p->next)
        if (p->data > maxNode->data) maxNode = p;
    return maxNode;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
情況處理
空鏈表打印錯誤並 exit(1) 終止程序
單節點直接返回該節點 data
所有值相同返回該值
含負數正常比較,無問題