鏈表插入操作是基礎數據結構技能。本文實現在指定位置插入節點,位置從 0 開始(0 表示頭插),超出範圍則報錯。代碼包含內存分配、指針重鏈、邊界處理。
0 ≤ pos ≤ 當前長度。element 和 next = NULL。pos == 0(頭插):新節點 next 指向原頭結點,返回新節點作為新頭。pos 個節點(即插入位置的前一個節點),將新節點插入其后。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;
}
malloc 是否返回 NULL。i == pos 時 pMove 指向插入位置的前驅節點。