java 反转单链表,偶尔会遇到的面试题。存手机里,再去面试,万一碰上就用到了。
// 单链表类 --- 添加元素,反转单链表,打印所有元素
public class LinkedList{
// 头结点
public Element header = null;
//
public LinkedList() { }
/**
* 添加元素
*/
void insertList(Object obj){
Element ele = new Element();
ele.value = obj;
if(header == null){ // 第一次插入元素
header = ele;
}else{ // 不是第一次插入元素
Element temp = header;
while(temp.next != null){ // 获得最后一个元素
temp = temp.next;
}
temp.next = ele;
}
}
/**
* 打印链表
*/
void print(){
StringBuffer sb = new StringBuffer();
sb.append("打印链表:");
Element temp = header;
while(temp != null){
sb.append(temp.value);
sb.append(" ");
temp = temp.next;
}
System.out.println(sb);
}
// 反转单链表
public void reverseList(){
Element now = header; // 定义 now 指向 header
Element prev = null; // 定义前一个结点
while(now != null){
Element next = now.next; // 定义 next 指向 now 的下一个结点
now.next = prev; // 修改 now 指向 prev
prev = now; // 将 now 结点复制给 prev
now = next; // 将 now 的下一个结点 next 复制给 now
}
header = prev;
}
// main
public static void main(String[] a){
LinkedList lList = new LinkedList();
lList.insertList(1);
lList.insertList(2);
lList.insertList(3);
lList.insertList(4);
lList.insertList(5);
lList.print();
// 反转单链表
lList.reverseList();
lList.print();
}
}
// 节点类
class Element{
public Object value = null;
public Element next = null;
}