剑指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+" "); } }
第三种方法可以用递归的方法,但是当链表的结点较大时,会因为递归的开销,而降低程序的效率。