码迷,mamicode.com
首页 > 其他好文 > 详细

剑指Offer05-链表反转

时间:2018-06-24 21:04:33      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:结构   链表   pop   stack   就是   empty   反转   根据   rev   

/**
     *  链表反转
     */

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

链表的数据结构:

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

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

 

剑指Offer05-链表反转

标签:结构   链表   pop   stack   就是   empty   反转   根据   rev   

原文地址:https://www.cnblogs.com/1214045596js/p/9221401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!