实现单链表的创建,插入,删除,查找,打印
时间: 2023-05-28 12:04:45 浏览: 100
实现单链表的建立、插入与删除
3星 · 编辑精心推荐
单链表是一种常见的数据结构,它是由若干个节点组成的链式结构,每个节点包含一个数据元素和一个指向下一个节点的指针。下面是单链表的创建、插入、删除、查找和打印的实现。
创建单链表:
```
typedef struct ListNode {
int val; // 数据元素
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
ListNode* createList(int* arr, int n) {
if (n == 0) return NULL;
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->val = arr[0];
head->next = NULL;
ListNode* p = head;
for (int i = 1; i < n; i++) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = arr[i];
node->next = NULL;
p->next = node;
p = node;
}
return head;
}
```
插入节点:
```
void insertNode(ListNode* head, int val, int pos) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
if (pos == 0) {
node->next = head;
head = node;
} else {
ListNode* p = head;
for (int i = 0; i < pos - 1; i++) {
p = p->next;
}
node->next = p->next;
p->next = node;
}
}
```
删除节点:
```
void deleteNode(ListNode* head, int val) {
ListNode* p = head;
while (p->next) {
if (p->next->val == val) {
ListNode* tmp = p->next;
p->next = tmp->next;
free(tmp);
break;
}
p = p->next;
}
}
```
查找节点:
```
int findNode(ListNode* head, int val) {
int pos = -1;
ListNode* p = head;
while (p) {
pos++;
if (p->val == val) {
return pos;
}
p = p->next;
}
return -1;
}
```
打印单链表:
```
void printList(ListNode* head) {
ListNode* p = head;
while (p) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
```
以上是单链表的基本操作实现,可以通过调用这些函数来操作单链表。需要注意的是,单链表的头结点通常不包含数据元素,只是一个指针,指向第一个节点。
阅读全文