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

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

 

posted @ 2018-06-24 18:57  meteorst  阅读(87)  评论(0编辑  收藏  举报