新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
c語(yǔ)言里怎么構(gòu)造單鏈表
在C語(yǔ)言中,構(gòu)造單鏈表需要以下步驟:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了孝南免費(fèi)建站歡迎大家使用!
1、定義鏈表節(jié)點(diǎn)結(jié)構(gòu)體
2、初始化鏈表節(jié)點(diǎn)
3、創(chuàng)建頭節(jié)點(diǎn)
4、插入節(jié)點(diǎn)
5、刪除節(jié)點(diǎn)
6、遍歷鏈表
下面是詳細(xì)的解釋和代碼示例:
1、定義鏈表節(jié)點(diǎn)結(jié)構(gòu)體:
typedef struct Node {
int data; // 節(jié)點(diǎn)數(shù)據(jù)
struct Node* next; // 指向下一個(gè)節(jié)點(diǎn)的指針
} Node;
2、初始化鏈表節(jié)點(diǎn):
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 動(dòng)態(tài)分配內(nèi)存空間
newNode>data = data; // 設(shè)置節(jié)點(diǎn)數(shù)據(jù)
newNode>next = NULL; // 設(shè)置下一個(gè)節(jié)點(diǎn)為空
return newNode; // 返回新節(jié)點(diǎn)的指針
}
3、創(chuàng)建頭節(jié)點(diǎn):
Node* createHead() {
Node* head = createNode(0); // 創(chuàng)建一個(gè)頭節(jié)點(diǎn),數(shù)據(jù)為0
return head; // 返回頭節(jié)點(diǎn)的指針
}
4、插入節(jié)點(diǎn):
void insertNode(Node** head, int data) {
Node* newNode = createNode(data); // 創(chuàng)建新節(jié)點(diǎn)
if (*head == NULL) { // 如果鏈表為空,將頭節(jié)點(diǎn)指向新節(jié)點(diǎn)
*head = newNode;
return;
}
Node* temp = *head; // 臨時(shí)保存頭節(jié)點(diǎn)的指針
while (temp>next != NULL) { // 遍歷鏈表,找到最后一個(gè)節(jié)點(diǎn)
temp = temp>next;
}
temp>next = newNode; // 將最后一個(gè)節(jié)點(diǎn)的指針指向新節(jié)點(diǎn),完成插入操作
}
5、刪除節(jié)點(diǎn):
void deleteNode(Node** head, int data) {
Node* temp = *head; // 臨時(shí)保存頭節(jié)點(diǎn)的指針
Node* previous = NULL; // 臨時(shí)保存前一個(gè)節(jié)點(diǎn)的指針,用于刪除操作時(shí)更新指針指向
while (temp != NULL && temp>data != data) { // 遍歷鏈表,找到要?jiǎng)h除的節(jié)點(diǎn)或到達(dá)末尾
previous = temp; // 更新前一個(gè)節(jié)點(diǎn)的指針指向當(dāng)前節(jié)點(diǎn)
temp = temp>next; // 移動(dòng)到下一個(gè)節(jié)點(diǎn)
}
if (temp == NULL) { // 如果未找到要?jiǎng)h除的節(jié)點(diǎn),直接返回不做任何操作
return;
} else if (previous == NULL) { // 如果頭節(jié)點(diǎn)就是要?jiǎng)h除的節(jié)點(diǎn),更新頭節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)(即刪除頭節(jié)點(diǎn))
*head = temp>next;
} else { // 如果刪除的是中間節(jié)點(diǎn),更新前一個(gè)節(jié)點(diǎn)的指針指向要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)(即跳過(guò)要?jiǎng)h除的節(jié)點(diǎn))
previous>next = temp>next;
}
free(temp); // 釋放要?jiǎng)h除節(jié)點(diǎn)的內(nèi)存空間(使用free函數(shù))
}
6、遍歷鏈表:
void traverseList(Node* head) {
Node* temp = head; // 臨時(shí)保存頭節(jié)點(diǎn)的指針,用于遍歷鏈表時(shí)移動(dòng)指針位置
while (temp != NULL) { // 遍歷鏈表,直到達(dá)到末尾(即下一個(gè)節(jié)點(diǎn)為空)
printf("%d ", temp>data); // 輸出當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)
temp = temp>next; // 移動(dòng)到下一個(gè)節(jié)點(diǎn),繼續(xù)遍歷鏈表(如果存在)或退出循環(huán)(如果到達(dá)末尾)
}
printf("
"); // 換行符,使輸出結(jié)果更易讀
}
當(dāng)前文章:c語(yǔ)言里怎么構(gòu)造單鏈表
瀏覽路徑:http://fisionsoft.com.cn/article/dpcspog.html


咨詢
建站咨詢
