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

C 語言鏈表節點插入操作實現詳解

     編輯:關於C語言

概述

鏈表插入操作是基礎數據結構技能。本文實現在指定位置插入節點,位置從 0 開始(0 表示頭插),超出範圍則報錯。代碼包含內存分配、指針重鏈、邊界處理。

算法步驟

  1. 檢查位置合法性:0 ≤ pos ≤ 當前長度。
  2. 分配新節點,初始化 element 和 next = NULL。
  3. 若 pos == 0(頭插):新節點 next 指向原頭結點,返回新節點作為新頭。
  4. 否則遍歷至第 pos 個節點(即插入位置的前一個節點),將新節點插入其后。
  5. 返回頭指針(頭插時改變,其餘不變)。

完整代碼

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

int sizeList(Node *pNode) {
    int len = 0;
    while (pNode) { len++; pNode = pNode->next; }
    return len;
}

Node *InsertToPosition(Node *pNode, int pos, int x) {
    if (pos < 0 || pos > sizeList(pNode)) {
        printf("%s函數執行,pos=%d非法,插入數據失敗\n", __FUNCTION__, pos);
        return pNode;
    }
    Node *pInsert = (Node *)malloc(sizeof(Node));
    pInsert->element = x;
    pInsert->next = NULL;

    if (pos == 0) {                 // 頭插
        pInsert->next = pNode;
        printf("%s函數執行,在pos=%d插入x=%d成功\n", __FUNCTION__, pos, x);
        return pInsert;
    }

    Node *pMove = pNode;
    int i = 1;
    while (pMove != NULL) {
        if (i == pos) {
            pInsert->next = pMove->next;
            pMove->next = pInsert;
            printf("%s函數執行,在pos=%d插入x=%d成功\n", __FUNCTION__, pos, x);
            break;
        }
        i++;
        pMove = pMove->next;
    }
    return pNode;
}

關鍵點

  • 位置定義清晰:0=頭插,1=第一個數據節點前,以此類推。
  • 頭插單獨處理:需更新頭指針,調用者必須接收返回值。
  • 內存分配檢查:生產代碼中應判斷 malloc 是否返回 NULL。
  • 遍歷終止條件:i == pos 時 pMove 指向插入位置的前驅節點。

測試建議

  • 空鏈表頭插、尾插、中間插入。
  • 非法位置(負數、超長)。
  • 連續多次插入驗證鏈表完整性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved