Ahri-珊

day16将分享LeetCode算法题206。

206. Reverse Linked List

逆转链表。

心路历程

方法1:

1.将链表的值放入数组

2.对数组求逆

3.建立新的链表

方法2:

1.遍历链表

2.将链表头结点与下一个结点断开

3.头指针指向剩下的结点

4.断开的结点的下一个结点等于之前断开的结点组成的链表的头节点

代码:

var reverseList = function(head) {
    if(!head)
        return null;
    var arr = [];
    while(head)
        {
            arr.push(head.val);
            head = head.next;
        }
    arr = arr.reverse();
    var l = new ListNode(arr[0]);
    var p = l;
    for(let i=1;i<arr.length;i++)
        {
            p.next = new ListNode(arr[i]);
            p = p.next;
        }
    return l;
};

var reverseList = function(head) {
    let prev = null, next = null;
    
    while(head){
        next = head.next;
        head.next = prev;
        prev = head;
        head = next;
    }
    return prev;
};

END