对于结点类型为LNode的单链表,编写出下列算法: typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; 1.删除单链表中的第i个结点 2.统计单链表的长度
时间: 2024-09-25 07:13:17 浏览: 39
对于`LNode`类型的单链表,以下是两个算法的描述:
1. 删除单链表中的第i个节点:
```c
void deleteNode(LinkList* head, int i) {
if (head == NULL || i <= 0) return; // 链表为空或索引无效
LinkList current = head, previous = NULL;
for (int j = 0; j < i - 1 && current != NULL; ++j) {
previous = current;
current = current->next;
}
if (current == NULL) return; // 第i个节点不存在
previous->next = current->next;
free(current); // 释放被删除节点的内存
}
```
这个函数首先检查链表是否为空或索引是否越界。然后通过遍历找到第`i`个节点前一个节点,将`current`的`next`指针指向第`i+1`个节点,实现了删除操作。
2. 统计单链表的长度:
```c
int getLength(LinkList head) {
if (head == NULL) return 0; // 空链表长度为0
int length = 0;
LinkList current = head;
while (current != NULL) {
length++;
current = current->next;
}
return length;
}
```
这个函数从头节点开始遍历链表,每遇到一个非空节点就加一,直到遍历到链表结束(`current`为`NULL`),返回累计的长度。
阅读全文