单链表的创建(头插法或尾插法二选一) 单链表的输出 单链表的插入 单链表的删除 单链表的查询 主函数功能菜单创建
时间: 2024-09-24 12:19:31 浏览: 36
**头插法创建单链表:**
头插法是在链表头部插入新节点。先创建一个空链表的头节点,然后每次插入新节点时都将其next字段指向当前头节点。
```c
ListNode* createLinkedList(int* arr, int size) {
ListNode* head = new ListNode(); // 创建头节点,初始为空
for (int i = 0; i < size; i++) {
ListNode* newNode = new ListNode(arr[i]); // 新节点存放元素
newNode->next = head; // 新节点next指向前一个头节点
head = newNode; // 更新头节点
}
return head;
}
```
**输出单链表:**
遍历链表,逐个打印节点值。
```c
void printList(ListNode* head) {
ListNode* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
```
**插入操作(尾插法):**
尾插法是在链表尾部插入节点,需要维护一个指向最后一个节点的指针。
```c
void insertAtEnd(ListNode*& tail, int value) {
ListNode* newNode = new ListNode(value);
if (tail == NULL) {
tail = newNode;
} else {
newNode->next = NULL;
tail->next = newNode;
}
}
```
**删除操作:**
删除指定位置的节点,这里以删除第一个匹配的节点为例。
```c
void deleteElement(ListNode** head, int target) {
if (*head == NULL) return;
if ((*head)->data == target) {
ListNode* temp = *head;
*head = (*head)->next;
delete temp;
return;
}
ListNode* curr = *head;
while (curr->next != NULL && curr->next->data != target) {
curr = curr->next;
}
if (curr->next != NULL) {
ListNode* temp = curr->next;
curr->next = curr->next->next;
delete temp;
}
}
```
**查询操作:**
查找特定值的节点。
```c
ListNode* searchElement(ListNode* head, int target) {
ListNode* curr = head;
while (curr != NULL) {
if (curr->data == target) return curr;
curr = curr->next;
}
return NULL; // 如果未找到目标,返回NULL
}
```
**主函数功能菜单创建:**
```c
void mainMenu() {
int choice;
do {
printf("1. 创建链表\n2. 输出链表\n3. 插入元素(尾插)\n4. 删除元素\n5. 查询元素\n6. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1: // 创建链表
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
ListNode* list = createLinkedList(arr, size);
break;
// 其他选项...
}
} while (choice != 6);
// 根据选择执行对应操作
}
```
阅读全文