js_algorithm
js_algorithm copied to clipboard
反转链表
leetcode: https://leetcode-cn.com/problems/reverse-linked-list/
题目分析
我们可以申请两个指针,第一个指针叫 pre
,最初是指向 null
的,第二个指针 cur
指向 head
,然后不断遍历 cur
。
每次迭代到 cur
,都将 cur
的 next
指向 pre
,然后 pre
和 cur
前进一位。
都迭代完了(cur
变成 null
了),pre
就是最后一个节点了。
边界条件: 当链表为
null
或链表中仅有一个节点时,不需要反转
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
if(!head || !head.next) return head
let cur = head, pre = null;
while(cur) {
const next = cur.next;
cur.next = pre;
pre = cur
cur = next;
}
return pre
};