数据结构_线性表的应用_线性表的逆置的java实现

这篇文章讲述的是数据结构部分的线性表的逆置的java实现,如有错误或者不当之处,还望各位大神批评指正。

问题描述

请编写一个算法实现链表的逆置,如有初始链表L:1,2,3,4,5逆置后为L:5,4,3,2,1

算法分析

  • 通过头插法可以实现对链表的逆置,顺序访问每个节点并把节点插入表头。
  • O(n),空间复杂度O(1)

代码实现

/**
     * @explain reverse方法: 将链表逆转
     * @throws 
     * @author 叶清逸
     * @date 2018年7月27日 下午12:42:44
     */
    public void reverse(){
        /*初始化遍历的指针*/
        Element p = head.next ;
        /*先将头结点与元素节点断开*/
        head.next = null ;
        /*遍历整个链表使用头插法将遍历的每个元素都插到头结点的后边*/
        for(int i=0 ; i<LENGTH ; i++){
            /*新建一个指针q指向当前节点后p指针下移*/
            Element q = p ;
            p = p.next ;
            /*将当前节点插入头结点后*/
            q.next = head.next ;
            head.next = q ;

        }
    }
  • 例子
/**
 * 问题描述:请编写一个算法实现链表的逆置,如有初始链表L:1,2,3,4,5逆置后为L:5,4,3,2,1
 * 
 * 算法分析:通过头插法可以实现对链表的逆置,顺序访问每个节点并把节点插入表头。
 * 
 * 复杂度分析:时间复杂度:O(n),空间复杂度O(1)
 */
public static void main(String[] args) {
        LinkList3 L = new LinkList3() ;
        L.init();
        for(int i=1 ; i<=100 ; i++){
            L.put(i);
        }
        System.out.println(L);
        long t1 = System.currentTimeMillis() ;
        L.reverse();
        long t2 = System.currentTimeMillis() ;
        System.out.println(L);
        System.out.println("转换操作共耗时:"+(t2-t1)+"毫秒");
    }

样例输出

LinkList:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
LinkList:[100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]
转换操作共耗时:0毫秒
展开阅读全文

没有更多推荐了,返回首页