用C语言建立一个单链表,在此链表上实现以下几种操作: 1.求此单链表的长度; 2.实现在递增整数链表插入新整数并保持序列有序性; 3.删除此单链表的第i个元素结点。
时间: 2024-10-11 17:02:53 浏览: 86
基于Java实现的单链表基本操作之获取链表长度.zip
在C语言中,我们可以使用结构体和指针来创建和操作单链表。下面是一个简单的例子,展示了如何实现上述三种操作:
首先,定义链表节点的结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
1. **求链表长度**:
可以通过遍历链表并将每个节点加入计数器来完成。
```c
int length(Node* head) {
int count = 0;
if (head != NULL) {
Node* temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
}
return count;
}
```
2. **插入有序整数**:
使用`insert_sorted`函数,在已排序链表中找到合适的位置插入新节点。
```c
void insert_sorted(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (*head == NULL || (*head)->data >= value) {
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL && current->next->data < value) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
```
3. **删除第i个元素**:
需要额外一个指针辅助查找目标节点,然后修改前一个节点的`next`指向下一个节点。
```c
void delete_nth(Node** head, int i) {
if (*head == NULL) return;
Node* temp = *head;
for (int j = 0; temp != NULL && j < i - 1; j++) {
temp = temp->next;
}
if (temp == NULL || temp->next == NULL) {
printf("Index out of range.\n");
return;
}
temp->next = temp->next->next;
}
```
阅读全文