实现一个单向链表,包含一下操纵:
时间: 2024-11-12 21:44:50 浏览: 13
为了实现一个单向链表,你需要包括以下基本功能:
1. **链表节点定义**:
定义一个结构体 `ListNode`,包含两个成员变量:数据 `data` 和指向下一个节点的指针 `next`。
```c
typedef struct ListNode {
int data; // 存储数据的元素
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
2. **初始化链表头节点**:
创建一个表示空链表的头节点 `head`,其 `next` 指针设为 `NULL`。
```c
ListNode* head = NULL;
```
3. **插入节点**:
- **插入到头部**:
```c
void insertAtHead(ListNode** head, int data) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
```
- **插入到尾部**:
```c
void insertAtTail(ListNode** head, int data) {
if (*head == NULL) {
insertAtHead(&head, data);
return;
}
ListNode* node = *head;
while (node->next != NULL) {
node = node->next;
}
node->next = (ListNode*)malloc(sizeof(ListNode));
node->next->data = data;
node->next->next = NULL;
}
```
4. **删除节点**:
- **删除指定值的节点**:
```c
void deleteNode(ListNode** head, int data) {
ListNode* temp = *head;
ListNode* prev = NULL;
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
if (prev == NULL) {
*head = temp->next;
} else {
prev->next = temp->next;
}
free(temp);
}
```
5. **查找节点**:
```c
ListNode* findNode(ListNode* head, int data) {
ListNode* current = head;
while (current != NULL) {
if (current->data == data)
return current;
current = current->next;
}
return NULL; // 如果找不到,返回 NULL
}
```
6. **遍历和显示链表**:
```c
void printList(ListNode* head) {
if (head == NULL) {
printf("链表为空\n");
return;
}
ListNode* temp = head;
while (temp != NULL) {
printf("%d ->", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
```
7. **释放链表内存**:
当不再需要链表时,遍历链表释放每个节点的内存。
```c
void releaseList(ListNode* head) {
ListNode* current = head;
ListNode* next;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
}
```
有了这些核心功能,你可以根据需要构建单向链表并执行相关的操作。
阅读全文