去不了的桂林
正题
反转链表
之前有做过一个关于反转链表的文章。可省略过多解释,直接一张图教你如何实现链表的反转。
核心逻辑:
- 定义 pre 保持上一节点指针
- 定义cur保持当前节点指针
- 定义 next 暂存下一节点指针,用来在交换完 pre 和 cur 之后,从 next 开始
- 交换 cur 和 pre
- 将 cur -> pre 形成交换
- 将 pre -> cur , cur -> next 指针右移准备反复
代码实现:
var reverseList = function(head) {
let pre = null
let cur = head
while(cur) {
const next = cur.next
cur.next = pre
pre = cur
cur = next
}
return pre
};
如果不想使用 新的空间去暂存 next 的话,也可以使用 ES6 的解构赋值去实现,这样while函数里面只需要一行代码:
**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let pre = null
let cur = head
while(cur) {
// const next = cur.next
// cur.next = pre
// pre = cur
// cur = next
[cur.next, pre, cur] = [pre, cur, cur.next]
}
return pre
};