zoukankan      html  css  js  c++  java
  • 剑指Offer05-链表反转

    /**
         *  链表反转
         */

    链表的特点:查找效率较慢,插入和删除的效率较快

    链表的数据结构:

    class node{
            String data;
            node next;
    }

    将链表反转输出最直接的方法就是改变链表的结点指向:

    pre/cur/temp作为改变链表指向的三个指针,然后再遍历链表的过程中去改变结点的指向;

    代码如下:

    //非递归反转链表输出,改变了链表的结构
        private static node reverse2(node head) {
            node pre=head;
            node cur=head.getNext();
            node temp;
            while(cur!=null){
                temp=cur.getNext();
                cur.setNext(pre);
                pre=cur;
                cur=temp;
            }
            head.setNext(null);
            return pre;    
        }

    第二种方法可以用栈结构加循环来输出反转链表:

    创建栈结构来保存结点,然后根据栈先进后出的特点来输出整个链表

    private static void reverse3(node head) {
            Stack<node> s = new Stack<node>();
            node pre = head;
            while(pre!= null) {
                s.push(pre);
                pre = pre.getNext();
            }
            
            while(!s.empty()) {
                System.out.print(s.pop().data+" ");
        
            }
            
        }

    第三种方法可以用递归的方法,但是当链表的结点较大时,会因为递归的开销,而降低程序的效率。

  • 相关阅读:
    爬取数据问题
    b站评论区爬取
    词云图制作
    情感分析
    一个progressbar widget
    jQuery ui effects
    在使用jQuery的时候不小心的内存泄漏
    在javascript中实现类似asp.net webcontrol中的render的方法
    jQuery 1.7的隐藏改动
    jQuery编写widget的一些窍门
  • 原文地址:https://www.cnblogs.com/meteorst/p/9221401.html
Copyright © 2011-2022 走看看