pta单链表结点删除
时间: 2025-01-01 15:30:56 浏览: 18
### PTA 平台单链表节点删除操作实现
对于单链表而言,删除指定位置或具有特定条件的节点是一个常见的操作。为了高效且正确地完成这一任务,在实际编程过程中需要注意几个方面:
#### 1. 定义单链表结构体
首先定义一个简单的单链表节点结构体来表示列表中的每一个元素。
```c
typedef struct ListNode {
int val; // 存储的数据
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
```
#### 2. 创建辅助函数用于创建新节点
这有助于简化后续代码逻辑并提高可读性。
```c
ListNode* createNode(int value) {
ListNode *new_node = (ListNode *)malloc(sizeof(ListNode));
new_node->val = value;
new_node->next = NULL;
return new_node;
}
```
#### 3. 删除给定值的第一个匹配项
当目标是从单链表中移除首次出现的目标值时,可以按照如下方式进行处理:
```c
bool removeFirstOccurrence(ListNode **head, int targetValue) {
if (*head == NULL || head == NULL) {
return false;
}
// 如果要删除的是头结点的情况
while ((*head)->val == targetValue && *head != NULL){
ListNode *temp = *head;
*head = (*head)->next;
free(temp);
if(*head==NULL){return true;}
}
// 非头部情况下的删除
ListNode *current = *head;
while(current->next!=NULL&& current->next->val != targetValue){
current=current->next;
}
if(current->next!=NULL){
ListNode *toDelete = current->next;
current->next= toDelete -> next ;
free(toDelete );
return true;
}else{
return false;
}
}
```
上述代码实现了从单链表中删除第一次遇到的目标值的功能,并考虑到了特殊情况如链表为空或是待删节点位于链首的情形[^1]。
阅读全文