用C语言实现单链表的“遍历”、“查找”与“改变”操作。
时间: 2024-10-21 08:17:20 浏览: 36
在C语言中,单链表是一种常见的数据结构,可以用于实现遍历、查找和修改等操作。
**遍历(Traversal):**
遍历单链表通常从头结点开始,通过`next`指针依次访问每个节点。以下是简单的遍历函数示例:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void traverseList(Node* head) {
if (head != NULL) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
} else {
printf("List is empty.\n");
}
}
```
**查找(Search):**
查找特定值的操作涉及比较当前节点的数据与目标值,直到找到匹配项或到达链表尾部。例如,搜索函数可以这样实现:
```c
Node* search(Node* head, int value) {
Node* current = head;
while (current != NULL && current->data != value) {
current = current->next;
}
return current;
}
```
如果找到该值,则返回指向该节点的指针;否则返回`NULL`表示未找到。
**改变(Modification):**
1. **插入(Insertion):** 可以在任意位置插入新节点,如在头部插入:
```c
void insertAtHead(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
```
2. **删除(Deletion):** 删除指定节点或特定值的节点,例如删除第一个匹配值的节点:
```c
void deleteNode(Node** head, int value) {
if (*head == NULL) return;
if ((*head)->data == value) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != value) {
current = current->next;
}
if (current->next != NULL) {
Node* toDelete = current->next;
current->next = current->next->next;
free(toDelete);
}
}
```
以上操作只覆盖了基本的单链表操作,实际应用中可能需要处理更复杂的边界条件和错误检查。
阅读全文