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

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

  • 相关阅读:
    洛谷 1341 无序字母对
    POJ 2774 后缀数组 || 二分+哈希
    HDU 1251 统计难题
    【解题报告】AtCoder ABC115 (附英文题目)
    【模板】后缀数组
    洛谷 3567/BZOJ 3524 Couriers
    Beta 冲刺 (1/7)
    团队项目评测
    beta冲刺前准备
    Alpha冲刺——事后诸葛亮
  • 原文地址:https://www.cnblogs.com/meteorst/p/9221401.html
Copyright © 2011-2022 走看看