给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0 ≤ � ≤ 1000 0≤n≤1000 要求:空间复杂度 � ( 1 ) O(1) ,时间复杂度 � ( � ) O(n) 。 如当输入链表{1,2,3}时, 经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。 以上转换过程如下图所示:示例1 输入: {1,2,3} 复制 返回值: {3,2,1}该题用js解答
时间: 2024-02-17 08:01:41 浏览: 44
以下是用 JavaScript 实现反转单链表的代码:
```javascript
function reverseList(pHead) {
let prev = null;
let curr = pHead;
while (curr) {
let next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
具体实现思路是,用三个指针 prev、curr、next 分别表示当前节点的前一个节点、当前节点、当前节点的后一个节点。在循环中,先将 next 指向 curr 的下一个节点,然后将 curr 的 next 改为 prev,接着将 prev 指向 curr,curr 指向 next,实现节点的反转。最后返回反转后的链表的头节点 prev。这个算法的时间复杂度为 O(n),空间复杂度为 O(1)。
相关问题
给定一个单链表的头结点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),只需要常数空间存储三个指针。
java 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0n\leq10000≤n≤1000
这是一个关于链表反转的算法问题,可以使用三个指针分别指向当前节点、前一个节点和后一个节点,依次遍历链表并反转指针方向即可。具体实现可以参考以下Java代码:
```
public ListNode reverseList(ListNode pHead) {
if (pHead == null || pHead.next == null) {
return pHead;
}
ListNode prev = null;
ListNode curr = pHead;
ListNode next = null;
while (curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
希望这个回答能够帮到您!如果您还有其他问题,欢迎继续提问。
阅读全文