好的,我可以帮你解决这个问题。以下是一个用C语言实现删除链表中指定元素的示例代码:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct ListNode {
int val;
struct ListNode *next;
};
// 创建链表并返回头结点指针
struct ListNode* createLinkedList(int arr[], int size) {
if (size == 0)
return NULL;
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = arr[0];
head->next = NULL;
struct ListNode *prev = head;
for (int i = 1; i < size; i++) {
struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = arr[i];
node->next = NULL;
prev->next = node;
prev = node;
}
return head;
}
// 删除链表中所有值为val的节点,并返回新的头结点
struct ListNode* removeElements(struct ListNode* head, int val) {
// 处理头结点连续出现需要删除的情况
while (head != NULL && head->val == val) {
struct ListNode* temp = head;
head = head->next;
free(temp);
}
// 处理其他节点需要删除的情况
struct ListNode* currNode = head;
while (currNode != NULL && currNode->next != NULL) {
if (currNode->next->val == val) {
struct ListNode* temp = currNode->next;
currNode->next = temp->next;
free(temp);
} else {
currNode = currNode->next;
}
}
return head;
}
// 打印链表
void printLinkedList(struct ListNode* head) {
struct ListNode* currNode = head;
while (currNode != NULL) {
printf("%d ", currNode->val);
currNode = currNode->next;
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
// 创建链表
struct ListNode* head = createLinkedList(arr, size);
// 删除指定节点值并打印结果
int val = 3;
printf("原链表:");
printLinkedList(head);
head = removeElements(head, val);
printf("删除后的链表:");
printLinkedList(head);
return 0;
}
你可以使用以上代码创建一个带有头结点的链表,并调用removeElements
函数来删除指定值的节点。注意,上述代码中假设链表中的值都是整数类型。
希望这能帮到你!如有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问