一. 簡介
前面學習了C語言中創建鏈表節點,向鏈表中插入節點等操作,文章如下:
C語言中單向鏈表:創建節點與插入新節點-CSDN博客
本文繼續學習c語言中對鏈表的其他操作,例如在鏈表中查找某個節點,刪除鏈表中某個節點,遍歷鏈表,釋放鏈表等等操作。
二. C語言中單鏈表操作:查找節點與刪除節點
1. 遍歷鏈表
遍歷鏈表就是依次訪問鏈表中的每個節點,打印或者處理每個節點中的數據,下面示例遍歷鏈表并輸出每個節點中的數據:
//遍歷鏈表
void traverse_list(Node* head) {Node* current = head;while(current != NULL) {printf("%d\n", current->data);current = current->next;}
}
1. 查找節點
查找節點具體就是在鏈表中查找指定值的節點。
//查找鏈表中指定數據所在的節點
Node* search_list_node(Node* head, int data) {Node* current = head;if(current == NULL) {return NULL;}while(current != NULL) {if(current->data == data) {return current;}current = current->next;} return NULL;
}
2. 刪除鏈表中的某個節點
刪除節點可以刪除頭部節點、尾部節點或者指定位置的節點。
(1) 刪除鏈表的頭部節點
刪除鏈表中的頭部節點,只需要將頭指針指向下一個節點,釋放第一個節點即可:
//刪除鏈表中的頭部節點
Node* delete_at_list_head(Node* head) {if(head == NULL) {return NULL;}//保存當前頭節點Node* tmp_p = head;//移動頭指針到下一個節點head = head->next; //釋放原來的頭節點free(tmp_p);return head;
}
(2) 刪除鏈表的尾部節點
刪除鏈表的尾部節點時,需要遍歷整個鏈表找到尾節點的前一個節點,將該節點的 next 置為 NULL,并釋放掉尾節點。示例如下:
//刪除鏈表中的尾部節點
Node* delete_at_list_tail(Node* head) {//如果鏈表為空if(head == NULL) {return NULL;}//如果鏈表只有一個節點if(head->next == NULL) {free(head);return NULL;}//查找鏈表尾節點的前一個節點(即倒數第二個節點)Node* tmp_p = head;while(tmp_p->next->next != NULL) {tmp_p = tmp_p->next;}//釋放鏈表中最后一個節點free(tmp_p->next);//將倒數第二個節點的 next指針指向NULLtmp_p->next = NULL;return head;
}
(3) 刪除鏈表中指定位置的節點
刪除鏈表中指定位置節點時,首先需要遍歷鏈表,找到目標節點的前一個節點,然后調節其 next指針跳過目標節點。