单链表进行求长度,查找,插入和删除运算,不带头结点,c语言
时间: 2024-03-26 11:38:55 浏览: 75
好的,这是一个关于单链表的问题,我会帮你解答。
以下是单链表的基本结构体定义:
```
typedef struct Node {
int data; // 存储的数据
struct Node *next; // 指向下一个节点的指针
} Node, *LinkedList; // 定义节点类型和链表类型
```
其中,`Node` 表示链表的节点,`next` 指向下一个节点的指针。`LinkedList` 表示整个链表。
接下来是单链表的基本操作:
1. 求链表长度
```
int getLength(LinkedList L) {
int len = 0; // 链表长度
Node *p = L; // 定义指针p指向链表头节点
while(p != NULL) { // 遍历链表
len++; // 长度加1
p = p->next; // 指针指向下一个节点
}
return len;
}
```
2. 查找指定节点
```
Node *findNode(LinkedList L, int x) {
Node *p = L; // 定义指针p指向链表头节点
while(p != NULL) { // 遍历链表
if(p->data == x) { // 找到指定节点
return p;
}
p = p->next; // 指针指向下一个节点
}
return NULL; // 没有找到,返回NULL
}
```
3. 插入节点
```
void insertNode(LinkedList L, int x, int pos) {
Node *p = L; // 定义指针p指向链表头节点
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新节点
newNode->data = x; // 设置新节点数据
newNode->next = NULL; // 新节点的下一个节点指向NULL
for(int i = 1; i < pos; i++) { // 找到插入位置的前一个节点
p = p->next;
}
newNode->next = p->next; // 新节点的下一个节点指向插入位置的节点
p->next = newNode; // 插入位置的前一个节点的下一个节点指向新节点
}
```
4. 删除节点
```
void deleteNode(LinkedList L, int x) {
Node *p = L; // 定义指针p指向链表头节点
Node *q = NULL; // 定义指针q指向要删除的节点的前一个节点
while(p != NULL && p->data != x) { // 找到要删除的节点
q = p;
p = p->next;
}
if(p == NULL) { // 没有找到要删除的节点
printf("没有找到要删除的节点\n");
return;
}
q->next = p->next; // 要删除的节点的前一个节点的下一个节点指向要删除的节点的下一个节点
free(p); // 释放要删除的节点的内存
}
```
以上就是单链表的基本操作。希望能够对你有所帮助。
阅读全文
相关推荐










