用c语言写出下面问题:定义一个单链表并删除单链表L中p所指向结点的前驱结点
时间: 2023-06-02 10:01:53 浏览: 62
链表节点定义:
```
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
删除p的前驱节点:
```
void deletePredecessor(ListNode *L, ListNode *p) {
if (L == NULL || p == NULL || L->next == NULL) {
return;
}
ListNode *pre = L;
ListNode *cur = L->next;
while (cur != NULL) {
if (cur == p) {
pre->next = cur->next;
free(cur);
return;
}
pre = cur;
cur = cur->next;
}
}
```
相关问题
对给定的单链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点。C语言
struct ListNode {
int val;
struct ListNode *next;
};
void deletePreNode(struct ListNode *head, int x) {
struct ListNode *p = head;
while (p->next != NULL) {
if (p->next->val == x) {
struct ListNode *pre = p->next;
p->next = pre->next;
free(pre);
return;
}
p = p->next;
}
}
对给定的单链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点的c语言代码
以下是删除 L 中值为 x 的结点的直接前驱结点的 C 语言代码:
```c
struct ListNode* deletePredecessor(struct ListNode* head, int x) {
struct ListNode* curr = head;
struct ListNode* prev = NULL;
while (curr != NULL) {
if (curr->next != NULL && curr->next->val == x) {
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
break;
}
prev = curr;
curr = curr->next;
}
return head;
}
```