亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

c語言鏈表的刪除方法是什么

小億
256
2023-08-24 19:23:11
欄目: 編程語言

在C語言中,鏈表的刪除操作通常需要執行以下步驟:

  1. 首先,創建一個指針用于指向要刪除的節點,通常稱為"current"或者"temp"。

  2. 如果鏈表為空(即頭指針為NULL),則無法進行刪除操作,可以直接返回。

  3. 如果要刪除的節點是頭節點,即要刪除的節點就是鏈表的第一個節點,需要對頭指針進行更新,將其指向第二個節點(如果存在)。

  4. 如果要刪除的節點不是頭節點,需要先找到要刪除節點的前一個節點,通常稱為"prev"。

  5. 更新"prev"節點的指針,將其指向要刪除節點的下一個節點。

  6. 釋放要刪除節點的內存空間,以防止內存泄漏。

  7. 最后,將"current"或者"temp"指針置為NULL,以避免懸空指針。

以下是一個示例代碼,展示了如何在C語言中刪除鏈表節點:

#include <stdio.h>
#include <stdlib.h>
// 定義鏈表節點結構體
typedef struct Node {
int data;
struct Node* next;
} Node;
// 刪除鏈表節點
void deleteNode(Node** head, int key) {
// 創建指針用于指向要刪除的節點
Node* current = *head;
Node* prev = NULL;
// 如果鏈表為空,直接返回
if (current == NULL) {
printf("鏈表為空,無法刪除節點。\n");
return;
}
// 如果要刪除的節點是頭節點
if (current != NULL && current->data == key) {
*head = current->next;
free(current);
printf("節點 %d 被成功刪除。\n", key);
return;
}
// 在鏈表中查找要刪除節點的位置
while (current != NULL && current->data != key) {
prev = current;
current = current->next;
}
// 如果找到了要刪除的節點
if (current != NULL) {
prev->next = current->next;
free(current);
printf("節點 %d 被成功刪除。\n", key);
}
// 如果沒有找到要刪除的節點
else {
printf("找不到要刪除的節點。\n");
}
}
// 創建一個新節點
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("內存分配失敗。\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 在鏈表末尾插入一個節點
void insert(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
// 打印鏈表
void printList(Node* head) {
if (head == NULL) {
printf("鏈表為空。\n");
return;
}
Node* current = head;
printf("鏈表的元素為:");
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 在鏈表末尾插入節點
insert(&head, 1);
insert(&head, 2);
insert(&head, 3);
insert(&head, 4);
insert(&head, 5);
// 打印鏈表
printf("原始鏈表:\n");
printList(head);
// 刪除鏈表節點
deleteNode(&head, 3);
deleteNode(&head, 6);
// 打印鏈表
printf("刪除節點后的鏈表:\n");
printList(head);
return 0;
}

輸出結果為:

原始鏈表:
鏈表的元素為:1 2 3 4 5
節點 3 被成功刪除。
找不到要刪除的節點。
刪除節點后的鏈表:
鏈表的元

0
穆棱市| 芮城县| 龙南县| 比如县| 连城县| 莎车县| 正镶白旗| 巴南区| 屏东县| 改则县| 桑日县| 汉源县| 师宗县| 肃宁县| 郸城县| 青州市| 紫阳县| 上栗县| 工布江达县| 千阳县| 台东县| 鄂尔多斯市| 许昌县| 临沧市| 织金县| 卓尼县| 五家渠市| 彰武县| 宁陵县| 长泰县| 黎川县| 枞阳县| 莱芜市| 柘城县| 宣汉县| 铜川市| 淳化县| 洛扎县| 高碑店市| 昭觉县| 保康县|