剑指Offer JZ15 反转链表(JavaScript)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:1051693
本题知识点: 链表

题目描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入
{1,2,3}
返回值
{3,2,1}

思路:

两个循环,先拿到每个节点的值存入数组,然后创建一条新的链表

function ListNode(x){
    
    
    this.val = x;
    this.next = null;
}
function ReverseList(pHead) {
    
    
    if (!pHead) return pHead
    let arr = [],
        zero = new ListNode(0),
        revHead = zero
    while (pHead) {
    
    
        arr.unshift(pHead.val)
        pHead = pHead.next
    }
    arr.forEach(n => {
    
    
        zero.next = new ListNode(n)
        zero = zero.next
    })
    return revHead.next
}

思路:
直接边遍历边反转
在这里插入图片描述
在这里插入图片描述
从头一步一步逆转到尾,last也就指向头指针,返回last即可

function ReverseList(pHead) {
    
    
    if (!pHead) return pHead
    let last
    while(pHead){
    
    
        let temp = pHead.next 
        pHead.next = last
        last = pHead
        pHead = temp
        temp = null
    }
    return last
}

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/114680601