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+" ");
        
            }
            
        }

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

  • 相关阅读:
    Chrome控制台JS设置xpath定位
    logging.exception
    python去除换行和空格
    从剪切板获取的内容无法使用type函数得到数据类型
    python获取剪切板的内容
    hdoj Radar Installation
    hdoj- Windows Message Queue
    hdoj-看病要排队
    hdoj-1896 stones
    评委会打分
  • 原文地址:https://www.cnblogs.com/meteorst/p/9221401.html
Copyright © 2011-2022 走看看