You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
头插法
var reverseList = function (head) {
if (!head) return head;
let p = head.next, L = head, temp;
L.next = null;
while (p) {
temp = p;
p = p.next;
temp.next = L;
L = temp;
}
return L;
};
Activity
hh-cheng commentedon Apr 11, 2020
方法一:遍历
边界条件:
方法二:递归
边界条件:
测试代码:
sisterAn commentedon Apr 11, 2020
解法一:迭代法
解题思路: 将单链表中的每个节点的后继指针指向它的前驱节点即可
画图实现: 画图帮助理解一下
确定边界条件: 当链表为
null或链表中仅有一个节点时,不需要反转代码实现:
时间复杂度:O(n)
空间复杂度:O(1)
解法二:尾递归法
解题思路: 从头节点开始,递归反转它的每一个节点,直到
null,思路和解法一类似代码实现:
时间复杂度:O(n)
空间复杂度:O(n)
解法三:递归法
解题思路: 不断递归反转当前节点
head的后继节点next画图实现: 画图帮助理解一下
代码实现:
时间复杂度:O(n)
空间复杂度:O(n)
leetcode
NLRX-WJC commentedon Apr 21, 2020
思路
反转链表,即是如下操作:



准备三个指针:
pLeft、pMid和pRight,分别先指向链表的前三个节点,如下接着,我们只需让
pLeft的next指向null,pMid的next指向pLeft,pRight的next指向pMid,并且依次将三个指针同时向前移动,边移动边调整三个指针的next指向,直到pRight为null时,此时pMid为链表的最后一个结点,然后让pMid的next指向pLeft,如下:而
pMid也就是反转后链表的头结点,最终将pMid返回即可。代码
Been101 commentedon Jul 15, 2020
1 递归甩锅
2 迭代法 // 当前节点指向上一个节点
AAAngelina commentedon Mar 11, 2021
头插法
var reverseList = function (head) {
if (!head) return head;
let p = head.next, L = head, temp;
L.next = null;
while (p) {
temp = p;
p = p.next;
temp.next = L;
L = temp;
}
return L;
};
RobinZhao00 commentedon May 25, 2022
// nb