可以通过以下代码实现单
链表的
基本操作:
#include <stdio.h>#include <stdlib.h>//定义 链表节点结构typedef struct Node {int data; // 数据域struct Node* next; //指针域,指向下一个节点} Node;//初始化 链表void initLinkedList(Node head) {*head = NULL;}//头插法 建表void createLinkedListHead(Node head) {int data;printf("输入节点数据,输入-1结束:");while (1) {scanf("%d", &data);if (data == -1) {break;}Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = *head;*head = newNode;}}//尾插法 建表void createLinkedListTail(Node head) {int data;printf("输入节点数据,输入-1结束:");Node* tail = NULL;while (1) {scanf("%d", &data);if (data == -1) {break;}Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;if (*head == NULL) {*head = newNode;tail = newNode;} else {tail->next = newNode;tail = newNode;}}}//查找节点Node* findNode(Node* head, int target) {Node* p = head;while (p != NULL) {if (p->data == target) {return p;}p = p->next;}return NULL;}//插入节点void insertNode(Node head, int pos, int data) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;if (pos == 0) {newNode->next = *head;*head = newNode;return;}Node* p = *head;int count = 0;while (p != NULL && count < pos - 1) {p = p->next;count++;}if (p == NULL) {printf("位置无效!");return;}newNode->next = p->next;p->next = newNode;}//删除节点void deleteNode(Node head, int data) {Node* p = *head;Node* prev = NULL;//删除的是头节点if (p != NULL && p->data == data) {*head = p->next;free(p);return;}while (p != NULL && p->data != data) {prev = p;p = p->next;}if (p == NULL) {printf("未找到要删除的节点!");return;}prev->next = p->next;free(p);}// 求表长int getLength(Node* head) {int len = 0;Node* p = head;while (p != NULL) {len++;p = p->next;}return len;}// 打印链表void printLinkedList(Node* head) {Node* p = head;while (p != NULL) {printf("%d ", p->data);p = p->next;}printf("");}int main() {Node* head;initLinkedList(&head);createLinkedListTail(&head);printLinkedList(head);int target;printf("输入要查找的节点数据:");scanf("%d", &target);Node* result = findNode(head, target);if (result != NULL) {printf("找到了!");} else {printf("未找到!");}int pos, data;printf("输入要插入的位置和数据:");scanf("%d %d", &pos, &data);insertNode(&head, pos, data);printLinkedList(head);printf("输入要删除的节点数据:");scanf("%d", &target);deleteNode(&head, target);printLinkedList(head);int length = getLength(head);printf("链表长度:%d", length);return 0;}
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/6804.html