数据结构和算法(三)图解单向链表反转

1. 数据结构和算法(三)图解单向链表反转  所谓的单链表反转,就是把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点。一直觉得反转链表实现代码不是很好理解,今天用画图的方式去理解它。1.1 需求分析反转链表需求:输入:[HBase,Redis,Kafka]输出:[Kafka,Redis,HBase]分析:存在链表 HBase → Redis → Kafk...
摘要由CSDN通过智能技术生成

1. 数据结构和算法(三)图解单向链表反转

  所谓的单链表反转,就是把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点。
一直觉得反转链表实现代码不是很好理解,今天用画图的方式去理解它。

1.1 需求分析

  1. 反转链表需求

    • 输入:[HBase,Redis,Kafka]
    • 输出:[Kafka,Redis,HBase]
  2. 分析

存在链表 HBase → Redis → Kafka → N,我们想要把它改成 N ← Kafka ← Redis ← HBase。

先说下思路:由于单链表没有指向前一个节点的指针域,因此我们需要增加一个指向前一个节点的指针prevNode,用于存储每一个节点的前一个节点。此外,还需要定义一个保存当前节点的指针currentNode,以及下一个节点的nextNode。定义好这三个指针后,遍历单链表,将当前节点的指针域指向前一个节点,之后将定义三个指针往后移动,直至遍历到最后一个节点停止。

链表反转代码的实现:

    public CustomLinkedList reverse() {
              
        Node<E> currentNode = this.first;         // #1
        Node<E> prevNode = new Node<E>();         // #2
        while (currentNode != null) {
                // #3    
            Node<E> nextNode = currentNode.next;  // #4
            currentNode.next = prevNode.next;     // #5
            prevNode.next = currentNode;          // #6
            currentNode = nextNode;               // #7
        }

        CustomLinkedList customLinkedList = new CustomLinkedList();  //#8
        customLinkedList.first = prevNode.next;   //#9
        customLinkedList
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值