设有一个表头指针为 h 的单链表。试设计一个算法,通过遍历一趟链 表,将链表中所有结点的链接方向逆转,如图2.2所示。要求逆转结果链 表的表头指针 h 指向原链表的最后一个结点。
时间: 2024-09-20 08:02:08 浏览: 79
算法:给定一个链表,判断链表中是否存在环
要设计一个算法来逆转单链表的方向,可以采用迭代的方式,步骤如下:
1. 初始化两个指针,`prev` 为 `NULL`(表示空),`cur` 初始设置为链表的头节点 `h`。
2. 当 `cur` 不为 `NULL` 时,执行以下操作:
```markdown
a. 将当前节点 `cur` 的 `next` 指针指向 `prev`,完成逆转操作。
b. 更新指针位置:`prev` 赋值给 `cur`,`cur` 赋值给 `cur.next`。
```
3. 循环结束后,`prev` 就会成为新的表头,因为最后 `cur` 会指向原来的尾节点,而 `prev` 最终指向的就是新的第一个节点。
这里是具体的伪代码实现[^1]:
```markdown
reverseLinkedList(h):
prev = NULL
cur = h
while cur != NULL:
cur.next = prev
prev = cur
cur = cur.next
return prev # 返回新表头,即原表尾
```
现在,链表的方向已经被逆转,新的表头 `prev` 指向的是原链表的最后一个结点。
阅读全文