算法题解-反转链表

简介: 算法题解-反转链表

题目


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

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


题解


第一种


我们在函数中先判断检查head是否为空,如果为空则说明链表为空我们直接返回null,然后我们声明了两个变量prev和node,默认值分别为null和head,这两个变量我们用于在遍历链表时进行节点的反转操作,然后我们使用一个循环,循环条件为node不为空,这能够保证我们遍历链表直到最后一个节点,在循环中我们先声明了一个变量next,用于保存了当前节点node的下一个节点,然后我们将当前节点的next指针指向前一个节点prev,这样就实现了节点的反转,然后我们更新一下prev变量为当前节点node并将其作为下一个节点的前一个节点,然后我们将当前节点node更新为下一个节点next,继续循环遍历链表,当循环结束后,我们将prev返回出去即可

var reverseList = function (head) {
  if (!head) return null;
  let prev = null;
  let node = head;
  while (node) {
    const next = node.next;
    node.next = prev;
    prev = node;
    node = next;
  }
  return prev;
};


第二种


我们在函数中先使用条件判断语句判断一下当前head为空或者head下一个节点为空,如果是则说明当前head只有一个节点,这样的情况下则无需反转,我们直接返回原链表的头节点head即可,如果不是我们则声明一个变量newHead,它保存了调用reverseList函数传入参数head.next的结果,我们这里使用了递归调用,因为这样可以把链表的反转操作拆分成更小的部分,然后我们在链表反转的过程中,将当前节点head的下一个节点的next指针指向当前节点实现反转,然后我们将当前节点head的next指针设置为null,这样就断开了当前节点与下一个节点的连接,避免了形成循环链表,最后我们返回变量newHead即可,这种方法比较第一种方法虽然很不错,不过在处理大型链表时有可能会导致堆栈溢出的问题

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