编写一段python代码,实现这个功能:给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤n≤1000 要求:空间复杂度 O(1),时间复杂度 O(n)
时间: 2023-09-24 08:06:07 浏览: 137
带头结点的单链表,反转并输出
### 回答1:
这里是实现反转单链表的 Python 代码:
```
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def reverseList(pHead: ListNode) -> ListNode:
# 定义三个指针,分别指向当前遍历的节点、它的前一个节点、它的后一个节点
curr = pHead
prev = None
next = None
# 遍历整个链表
while curr:
# 记录下一个节点
next = curr.next
# 反转当前节点的指针
curr.next = prev
# 将当前节点和前一个节点向后移动
prev = curr
curr = next
# 返回反转后链表的表头
return prev
```
算法的时间复杂度为 O(n),空间复杂度为 O(1)。
### 回答2:
要实现单链表的反转,可以使用迭代的方式,从头结点开始遍历链表,将当前节点的指针指向前一个节点,然后将前一个节点更新为当前节点,继续遍历直到遍历完整个链表。
下面是实现该功能的Python代码:
```
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(pHead):
if not pHead or not pHead.next:
return pHead
prev = None
curr = pHead
while curr:
temp = curr.next
curr.next = prev
prev = curr
curr = temp
return prev
```
其中,我们定义一个节点类`ListNode`,包含一个值属性`val`和一个指向下一个节点的指针`next`。`reverseList`函数通过遍历链表将每个节点的指针方向反转,并使用`prev`保存当前节点的前一个节点,`curr`保存当前节点。最后返回反转后的链表的新的头结点`prev`。
此实现的空间复杂度为O(1),时间复杂度为O(n),满足题目要求。
### 回答3:
要实现反转单链表的功能,可以使用迭代的方法遍历链表并修改指针指向。具体步骤如下:
1. 定义两个指针pre和cur,其中pre用于保存反转后链表的头节点,初始时指向None;cur用于遍历原链表,初始时指向pHead。
2. 在迭代过程中,依次将cur节点的next指针指向pre,然后pre和cur指针分别向后移动一个节点,直到cur遍历完整个链表。
3. 返回pre作为新链表的头节点。
下面是对应的Python代码实现:
```python
def reverseLinkedList(pHead):
pre = None
cur = pHead
while cur:
# 保存当前节点的下一个节点
nextNode = cur.next
# 修改当前节点的next指针指向pre
cur.next = pre
# pre和cur指针移动到下一个位置
pre = cur
cur = nextNode
return pre
```
这段代码的时间复杂度为O(n),空间复杂度为O(1)。
阅读全文