反转链表|刷题打卡

130 阅读1分钟

一、题目描述

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL               

二、思路分析

这道题我们用两种方法去做,我更推荐第一个双指针法,我们设置一个空指针当作pre,保存一下我们每次当前指针的next,然后把当前指针的next指向前面的结点这样的话就相当于我们把每一个结点都往前指,

三、AC代码

//双指针

var reverseList = function(head) {
    if(!head || !head.next) {
        return head
    }
    let cur = head
    let pre = null
    while(cur) {
        let next = cur.next
        cur.next = pre
        pre = cur
        cur = next
    }
    return pre
 }
// 
function reverseNodeList(head) {
    let currentNode = null
    let headNode = head
    while(head && head.next) {
        currentNode = head.next    //把current先设置为第二个
        head.next = currentNode.next
        currentNode.next = headNode
        headNode = currentNode
    }
    return headNode
}

四、总结

这道题可以说是一个比较简单常见的链表题,但是很多后续题目的基础,是很重要掌握很多题目的基础,大家一定要深切的掌握好这道题的思想。