单链表结构及运算的实现
时间: 2024-05-15 15:13:11 浏览: 111
单链表的实现
单链表是一种数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。它可以用来存储一些数据,如字符串、数字等。单链表支持的基本操作有插入、删除、遍历等。
以下是单链表的结构体定义:
```
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
其中,`val` 表示节点存储的数据,`next` 表示指向下一个节点的指针。
创建一个单链表可以使用以下函数:
```
ListNode* createList(int* arr, int n) {
ListNode *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
ListNode *node = malloc(sizeof(ListNode));
node->val = arr[i];
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
```
其中,`arr` 表示数据元素数组,`n` 表示数组的长度。该函数返回创建好的单链表的头节点。
插入一个节点可以使用以下函数:
```
void insertNode(ListNode* head, int val, int pos) {
ListNode *node = malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
ListNode *p = head;
for (int i = 0; i < pos - 1; i++) {
p = p->next;
}
node->next = p->next;
p->next = node;
}
```
其中,`head` 表示单链表的头节点,`val` 表示要插入的数据元素,`pos` 表示要插入的位置。
删除一个节点可以使用以下函数:
```
void deleteNode(ListNode* head, int pos) {
ListNode *p = head;
for (int i = 0; i < pos - 1; i++) {
p = p->next;
}
ListNode *q = p->next;
p->next = q->next;
free(q);
}
```
其中,`head` 表示单链表的头节点,`pos` 表示要删除的节点的位置。
遍历单链表可以使用以下函数:
```
void traverseList(ListNode* head) {
ListNode *p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
```
其中,`head` 表示单链表的头节点。
以上是单链表的基本操作,通过这些操作可以实现各种功能。
阅读全文