前端算法-链表反转

简介: 前端算法-链表反转

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]

思路一

我们这里先新建一个变量newHead,默认值为null,它是倒置的新头节点,然后我们使用循环,如果当前的head形参不为null则一直循环,因为倒置的过程需要知道是否全部倒置完了即未倒置的头节点是null值,在循环中我们先保存未倒置节点的下一个节点,将head形参的next属性值存储到next变量中,然后将新节点指向head的next属性值,也就是将第一个节点倒置指向新的头节点,然后再讲head形参赋值给newHead变量,进行更新下倒置后的头节点,然后再讲未倒置的头节点进行更新,将next变量赋值给head形参,最后将倒置后的newHead链表返回出去即可

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
    let newHead = null
    while (head !== null) {
        let next = head.next
        head.next = newHead
        newHead = head
        head = next
    }
    return newHead
};

思路二

我们这里还可以使用递归的方式进行反转链表,我们先判断head是否为null或者为最后一个节点时,如果是则直接返回head本身,然后再声明一个lastHead变量,用于存储调用自身的返回值,我们将当前head形参的next传给自身进行调用,反转head节点后面的节点,并返回最后一个节点,然后将head指向的next的next指向head,进行反转head和next,最后head的next指向null,这样就完成链表反转了,然后再反转后的链表返回出去即可

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    if(head === null || head.next === null) {
        return head;
    }
    const lastHead = reverseList(head.next);
    head.next.next = head; 
    head.next = null;
    return lastHead;
};


相关文章
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
65 1
|
1月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
46 0
|
1月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
43 0
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
32 0
|
1月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
88 0
|
18天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
18天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
1月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
1月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇