1.编写下列算法,假定单链表的头指针用L表示,类型为LinkList。(1)将一个单链表中的所有结点按相反次序链接。(10分) (2)删除单链表中第i个(i≥1)结点。(5分) (3)从单链表中查找出最小值。(5分)
时间: 2024-10-15 16:26:10 浏览: 38
(1) **反向链表**:
这是一个常见的链表操作,可以分为两个步骤:
1. 初始化三个指针,一个指向当前节点(`temp`),一个指向前驱节点(`prev`,初始为空),一个指向原链表的头节点 `L`。
2. 遍历原链表,每次循环:
- 将当前节点的下一个节点赋给 `prev`。
- 更新 `prev` 的 next 指向 `temp`,然后移动 `temp` 和 `prev` 向前。
3. 当遍历结束时,`prev` 就指向了新的链表头节点,将它赋值给 `L`。
```python
def reverse_list(L):
prev = None
temp = L
while temp:
next_temp = temp.next
temp.next = prev
prev = temp
temp = next_temp
return prev
```
(2) **删除第 i 个节点**:
这个操作需要先定位到第 i 个节点,然后更新其前一个节点的 next 指针跳过目标节点。
- 初始化计数器 `count` 为 1,同时遍历链表:
- 如果遇到第 i 个节点,将其从链表中移除(`prev.next = current.next`),返回原链表继续遍历。
- 记录每个节点作为 `current` 或 `prev`,直到找到第 i 个节点。
- 如果遍历结束后还未到达第 i 个节点,说明链表长度小于 i,不需要做任何操作。
```python
def delete_node_at_index(L, i):
if i <= 0:
return L
current = L
prev = None
count = 0
while current and count < i - 1:
prev = current
current = current.next
count += 1
if current is not None:
prev.next = current.next
return L
```
(3) **查找最小值**:
遍历整个链表,比较每个节点的值,保存第一个遇到的最小值。
- 初始化一个变量 `min_value` 为链表的第一个节点的值,同时初始化一个指针 `curr` 指向第一个节点。
- 循环遍历链表,如果当前节点的值小于 `min_value`,则更新 `min_value`。
- 循环结束后,`min_value` 存储的就是链表中的最小值。
```python
def find_min(L):
min_value = L.val
curr = L
while curr.next:
if curr.next.val < min_value:
min_value = curr.next.val
curr = curr.next
return min_value
```
阅读全文