反转一个单链表。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路: 设置两个哨兵节点pre和current,初始情况下pre指向null,current指向头节点,下一步将当前节点current指向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) {
var pre = null
var current = head
while (current !== null) {
var next = current.next
current.next = pre
pre = current
current = next
}
return pre
};