ListNode* ReverseList(ListNode* pHead)
时间: 2023-07-23 07:15:15 浏览: 86
您好!要反转一个链表可以使用迭代或递归的方法。下面是使用迭代的方法来反转链表的代码示例:
```cpp
ListNode* ReverseList(ListNode* pHead) {
ListNode* prev = nullptr;
ListNode* curr = pHead;
while (curr != nullptr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
这段代码使用三个指针 `prev`、`curr` 和 `next` 分别表示当前节点、前一个节点和下一个节点。在循环中,我们不断将当前节点的 `next` 指针指向前一个节点,然后更新三个指针的位置。
希望对您有所帮助!如果还有其他问题,请随时提问。
相关问题
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
算法思路:
- 定义三个指针pre、cur、next,初始化pre为None,cur为pHead,next为pHead.next;
- 当cur不为空时,执行以下操作:
- 将cur的next指向pre;
- 将pre、cur、next向后移动一个节点;
- 反转完成后,返回pre作为新链表的头节点。
Python代码实现:
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def reverseList(self, pHead):
if not pHead or not pHead.next:
return pHead
pre = None
cur = pHead
while cur:
next = cur.next
cur.next = pre
pre = cur
cur = next
return pre
```
时间复杂度:O(n),因为需要遍历整个链表。
空间复杂度:O(1),只需要常数空间存储三个指针。
用c语言给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 要求:空间复杂度 ,时间复杂度 。
以下是用C语言实现反转单链表的代码:
```c
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *prev = NULL;
struct ListNode *curr = head;
while(curr != NULL) {
struct ListNode *next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
在该代码中,我们定义了一个结构体 `ListNode` 来表示单链表的每个节点,每个节点有一个整型值 `val` 和一个指向下一个节点的指针 `next`。函数 `reverseList` 用来反转整个链表,它输入链表的头节点 `head`,输出反转后的链表头节点。该函数的实现过程如下:
定义两个指针 `prev` 和 `curr`,分别指向反转后的链表头节点和当前节点。
遍历原链表,每次将当前节点 `curr` 的指针指向前一个节点 `prev`,然后将两个指针都向后移动一位。这样,反转后的链表就被构建出来了。
最后返回 `prev`,即反转后的链表头节点。
时间复杂度为 O(n),空间复杂度为 O(1)。
阅读全文