线性链表 反转
时间: 2023-07-10 20:12:25 浏览: 112
线性链表反转是一个比较常见的算法问题,可以使用迭代或递归的方式实现。以下是迭代实现的示例代码:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *prev = NULL, *curr = head;
while (curr != NULL) {
ListNode *next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
};
```
在这个示例代码中,我们使用两个指针 `prev` 和 `curr` 来反转链表。初始时,`prev` 指向 `NULL`,`curr` 指向链表的头结点 `head`。然后,我们不断地将 `curr` 的 `next` 指针指向 `prev`,并将 `prev` 和 `curr` 都向后移动一个位置,直到 `curr` 变成了 `NULL`,此时反转完成,返回 `prev` 即可。
需要注意的是,在反转链表时要特别注意链表的头结点需要指向 `NULL`,否则会出现死循环的情况。
阅读全文