用c语言实现,建立一个单链表,在此链表上实现以下几种操作: 1.求此单链表的长度; 2.实现在递增整数链表插入新整数并保持序列有序性; 3.删除此单链表的第 i 个元素结点。
时间: 2024-10-11 17:12:44 浏览: 30
用C语言实现单链表的各种操作(一)
在C语言中,可以使用指针来实现一个动态单链表,并完成上述操作。首先,我们需要定义链表节点结构体:
```c
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
接下来,我们实现各个功能:
1. **求链表长度**:
```c
int getLength(ListNode* head) {
int length = 0;
while (head != NULL) {
length++;
head = head->next;
}
return length;
}
```
2. **插入新整数并保持有序**:
```c
void insertSorted(ListNode** head, int val) {
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
new_node->val = val;
if (*head == NULL || new_node->val < (*head)->val) {
new_node->next = *head;
*head = new_node;
} else {
ListNode* current = *head;
while (current->next != NULL && current->next->val < new_node->val) {
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
}
```
这里的插入部分会找到合适的位置使得插入的新节点仍然保持有序。
3. **删除第 i 个元素**:
```c
void removeElement(ListNode** head, int index) {
if (*head == NULL || index <= 0) {
return;
}
ListNode* current = *head;
for (int i = 0; i < index - 1 && current != NULL; ++i) {
current = current->next;
}
if (current != NULL) {
current->next = current->next->next;
}
}
```
这个函数会从链表开头开始遍历,找到第 i 个节点并将其前驱的`next`指针指向`current->next`,从而达到删除目的。
阅读全文