leetcode206 反转列表

leetcode 206的两种实现思路

实现一:利用堆栈

利用栈后进先出,将值从头到尾push到数组a,后再pop出来,从头到尾赋给原链表。需要两个指针辅助压栈及出栈的赋值(方便最后直接返回head指针,实际运用中根据自己需要确定指针个数即可)

  • 注意:虽然利用了两个指针,但其本质不是双指针解法
var reverseList = function(head) {
   const a = [];
   let p1 = head;
   let p2 = head;
   while(p1){
       a.push(p1.val); //压栈
       p1 = p1.next;
   }
   while(p2){
       p2.val = a.pop();//出栈
       p2 = p2.next;
   }
   return head;
};

实现二:双指针实现

双指针,一跑一追,注意跑在前面的节点应该存储其下一节点为临时节点,因为跑节点会将next设为追节点,以实现反转,从而失去其原本next节点。

   var reverseList = function(head) {
   let p1 = head; //跑节点
   let p2 = null;//追节点
   while(p1){
       const tmp = p1.next; //临时变量
       p1.next = p2;
       p2 = p1;
       p1 = tmp;
   }

   return p2;
};

执行用时及内存消耗

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值