91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
临漳县| 乐至县| 荣昌县| 宁德市| 江永县| 九龙坡区| 开江县| 澳门| 商丘市| 沐川县| 宜黄县| 阿尔山市| 甘南县| 中宁县| 海南省| 邯郸市| 雷州市| 太谷县| 进贤县| 凤山县| 塘沽区| 东莞市| 南充市| 屯留县| 邢台市| 淮滨县| 武强县| 福州市| 罗田县| 阿合奇县| 普陀区| 阿尔山市| 大兴区| 柯坪县| 蕲春县| 上饶市| 土默特左旗| 沙河市| 乐安县| 保定市| 光泽县|