用C语言编程:创建一个带头结点的单链表。 允许用户随机输入若干整数填充链表。 查找数值等于用户输入的 dat 的节点的最大位序。 允许用户插入元素到指定位置。 删除链表中的最大值节点。
时间: 2024-10-15 11:26:12 浏览: 40
在C语言中,我们首先需要定义一个结构体`ListNode`表示链表节点,包含数据域`data`和指向下一个节点的指针`next`。然后,我们可以创建几个函数来实现所需的功能:
1. **创建链表**:
```c
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
ListNode* createList() {
ListNode* head = NULL, *temp = NULL;
int input;
printf("请输入整数(0表示结束输入):");
while (scanf("%d", &input) != EOF && input != 0) {
temp = (ListNode*)malloc(sizeof(ListNode));
temp->data = input;
temp->next = head;
head = temp;
printf("已添加 %d 到链表。\n", input);
}
return head;
}
```
2. **查找最大位序节点**:
```c
int findMaxNode(ListNode* head, int dat) {
ListNode* maxNode = head;
int currentMax = INT_MIN;
while (head != NULL) {
if (head->data > dat && head->data > currentMax) {
maxNode = head;
currentMax = head->data;
}
head = head->next;
}
return maxNode ? maxNode->data : -1; // 返回最大值或-1如果未找到
}
int main() {
ListNode* list = createList();
int inputDat;
printf("请输入要查找的数字:");
scanf("%d", &inputDat);
int result = findMaxNode(list, inputDat);
if (result != -1)
printf("最大位序节点的值为:%d\n", result);
else
printf("未找到该数字的节点。\n");
// 其他功能...
}
```
3. **插入元素**:
```c
void insertNode(ListNode** head, int data, int position) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = data;
if (*head == NULL || position == 0) {
newNode->next = *head;
*head = newNode;
return;
}
ListNode* prev = *head;
for (int i = 1; i < position - 1 && prev != NULL; ++i) {
prev = prev->next;
}
if (prev != NULL) {
newNode->next = prev->next;
prev->next = newNode;
} else {
printf("无效的位置。\n");
}
}
// 在main函数中调用此函数插入节点
```
4. **删除最大值节点**:
```c
void deleteMaxNode(ListNode** head) {
if (*head == NULL) {
printf("链表为空。\n");
return;
}
ListNode* maxNode = *head;
ListNode* temp = *head;
while (temp != NULL && temp->next != NULL && temp->next->data > maxNode->data) {
maxNode = temp->next;
}
if (maxNode != *head) {
temp->next = maxNode->next;
free(maxNode);
printf("最大值节点已删除。\n");
} else if (temp == *head) {
printf("最大值就是头节点,无法删除。\n");
}
}
// 在main函数中调用此函数删除最大值节点
```
阅读全文