zoukankan      html  css  js  c++  java
  • 链表的翻转(java)

    翻转的两种方法:非递归与递归。

    1、非递归方法

    public ListNode reverse(ListNode node) {
                Node prev = null;
                while (node != null) {
                    //每次新建一个链表,用来读取每次循环操作的一个节点
                    ListNode tmp = node;
                    //将传入的链表指向下一个节点,下次循环将下一个节点重新赋给tmp
                    node = node.next;
                    //将取出的节点的下一个节点置为上次操作后已完成翻转的部分节点
                    tmp.next = prev;
                    //将新的完成翻转部分的节点重新赋给待输出的链表
                    prev = tmp;
                }
                //输出已完成翻转的链表
                return prev;
      }
            
    

    2、递归方法

    public Node reverse(ListNode node) {
                ListNode prev = null;
                 //递归判断条件,当链表为空或只有一个节点时,跳出递归
                if (node == null || node.next == null) {
                    prev = node; 
                } else {
                    //完成原链表完成从第二个节点到最后一个节点间的翻转
                    ListNode tmp = reverse(node.next);
                    //原链表第二个节点指向第一个节点
                    node.next.next = node;
                    //原链表第一个节点指向空,完成链表翻转
                    node.next = null;
                    prev = tmp;
                }
                return prev;
    }
    

      

      

  • 相关阅读:
    事件的解除与绑定
    JavaScript 继承
    left 和 margin-left
    表格 DOM 操作
    基于继承的拖拽
    碰撞运动
    弹性运动
    完美运动框架
    JS 操作 Cookie
    DIV拖拽
  • 原文地址:https://www.cnblogs.com/stupid-chan/p/11351072.html
Copyright © 2011-2022 走看看