1.针对带表头结点的单链表,试编写下列函数。 (1) 定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL。 (2) 求最大值函数max:通过一趟遍历在单链表中确定值最大的结点。
时间: 2024-09-30 08:06:01 浏览: 42
(1) 定位函数Locate(在单链表中查找指定位置的节点)可以这样实现:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* Locate(ListNode* head, int i) {
if (head == NULL || i < 0) {
return NULL; // 如果链表为空或索引越界,返回空指针
}
ListNode* current = head;
for (int j = 1; j <= i && current != NULL; j++) {
current = current->next;
}
return current; // 返回第i个节点的地址,如果找到则不为NULL,否则为NULL
}
```
这个函数从头开始遍历链表,每经过一次循环就移动到下一个节点,直到到达第i个节点或者链表结束。
(2) 求最大值函数max可以在遍历链表的过程中动态更新最大值:
```c++
ListNode* FindMax(ListNode* head) {
if (head == NULL) {
return NULL;
}
ListNode* maxNode = head;
while (head->next != NULL) {
if (head->val > maxNode->val) {
maxNode = head;
}
head = head->next;
}
return maxNode;
}
// 调用函数获取并返回最大值节点
ListNode* max(ListNode* head) {
return FindMax(head);
}
```
`FindMax` 函数首先检查头节点是否为最大值,然后逐个比较当前节点和已知的最大值,更新最大值节点。最后返回发现的最大值节点。
阅读全文