java 反转单链表,偶尔会遇到的面试题

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;
}

猜你喜欢

转载自blog.csdn.net/beguile/article/details/88138742