链表的逆置

创建一个链表

class Node{

    constructor(value){

        this.value=value

        this.next=null

    }

}

// 实例对象

const a=new Node(1)

const b=new Node(2)

const c=new Node(3)

const d=new Node(4)

// 构建链表

a.next=b

b.next=c

c.next=d

// 执行逆置

/*

    root.next.next=null是出口

    root.next=null说明 此时root是最后一个节点 如果要逆置 则需要两个节点

    root.next.next是倒数第二个节点,现在我们找到了最后一个节点,让最后一个节点的指向 变为倒数第二个节点 也就是 root.next.next=root

    然后返回 最后一个节点,return root.next

    然后我们使用递归传入root.next,也就是root的前一个结点继续更改指向

    当进入当原本的第二个节点时(root.next)此时第三个节点指向第二个节点

    又因为 传入的参数是root.next 所以不能返回第一个节点,在递归跳出来之后 手动指定第二个指向第一个

    第一个指向null


 

*/

function reverse(root){

    if(root.next.next==null){

        root.next.next=root

        return root.next

    }else{

        var q=reverse(root.next)

        // 让原本第二个节点指向第一个节点

        root.next.next=root

        // 让第一个节点指向null

        root.next=null

        // 返回递归的值 如果不返回则会无限递归

        return q

    }

}

// 遍历链表

function  travel(root){

    if(root==null)return

    console.log(root.value)

    travel(root.next)

}

travel(reverse(a))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只java小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值